码迷,mamicode.com
首页 > 编程语言 > 详细

1005.K 次取反后最大化的数组和

时间:2019-07-08 13:27:01      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:ges   也会   最小   turn   i++   alt   个数   public   com   

技术图片
这道题我的做法是进行排序 从小到大 取以一个数取反 再进行排序取反 每一次取的数都是最小的 如-10 变 10 排序 取第一个数

class Solution {
    public int largestSumAfterKNegations(int[] A, int K) {
         Arrays.sort(A);
         int sum = 0;
         for(int i = 0;i < K ;i++) {
             A[0] = -A[0];
             Arrays.sort(A);
         }
         for(int i = 0 ; i < A.length ;i++ ) {
             sum += A[i];
         }
         return sum;  
        }
}

这是一种很简单的解法
另外一种是优先队列 有限队列入队列后 也会进行一个从小到大排序 跟上面差不多

class Solution {
    public int largestSumAfterKNegations(int[] A, int K) {
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for (int num: A) {
            pq.offer(num);
        }
        for (int i = 0; i < K; i++) {
            pq.offer(-pq.poll());
        }
        int sum = 0;
        while (!pq.isEmpty()) {
            sum += pq.poll();
        }
        return sum;
    }
}

1005.K 次取反后最大化的数组和

标签:ges   也会   最小   turn   i++   alt   个数   public   com   

原文地址:https://www.cnblogs.com/cznczai/p/11150440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!