Leetcode1005

 

分情况进行讨论:

cnt是负数个数

1. k<=cnt

  按照负数大小依次取反

2.k>cnt 

  存在0值或剩余取反数为偶数

  不存在0值,剩余取反数为奇数: 将绝对值最小的一个取反

匿名表达式 重写Comparetor

 new PriorityQueue<>((a,b)->{nums[a]-nums[b]});

 E poll():从队首删除并返回一个元素

 E peek():返回队首的元素(但是不删除)

代码如下

 

 public int largestSumAfterKNegations(int[] nums, int k) {
         boolean zero=false;
        Integer index=0;
        PriorityQueue<Integer> pq = new PriorityQueue<>((a,b)->nums[a]-nums[b]);
        for(int i = 0; i<nums.length;i++){
            if(nums[i]<0){
                pq.add(i);
            }else if(nums[i]==0){
                zero=true;
            }else if(Math.abs(i)>Math.abs(index)){
                index=i;
            }else{
                //什么也不用做
            }
        }
        if(k<=pq.size()){
            while(k-->0){
                nums[pq.peek()]=-nums[pq.peek()];
                pq.poll();
            
            }            
        }else{
            while(!pq.isEmpty()&&k-->0){
                nums[pq.peek()]=-nums[pq.peek()];
                pq.poll();
            }
            if(!zero&&pq.size()%2==1) nums[index]=-nums[index];
        }
        int res = 0;
        for(int num:nums){
            res+=num;
        }
        return res; 
    }

 

 还有条件没过

 

 修改之后 主要 修改 pq.size()始终为0 ,Math.abs(nums[i])比较

 public int largestSumAfterKNegations(int[] nums, int k) {
         boolean zero=false;
        Integer index=0;
        PriorityQueue<Integer> pq = new PriorityQueue<>((a,b)->nums[a]-nums[b]);
        for(int i = 0; i<nums.length;i++){
            if(nums[i]<0){
                pq.add(i);
            }
            if(nums[i]==0){
                zero=true;
            }
            if(Math.abs(nums[i])<Math.abs(nums[index])){
                index=i;
            }
        }
        if(k<=pq.size()){
            while(k-->0){
                nums[pq.peek()]=-nums[pq.peek()];
                pq.poll();
            }            
        }else{
            
            while(!pq.isEmpty()&& k-->0){
                nums[pq.peek()]=-nums[pq.peek()];
                pq.poll();  
            }
            if(!zero&&k%2==1){ 
                nums[index]=-nums[index];
                  System.out.println(nums[index]);
            }
        }
        int res = 0;
        for(int num:nums){
            res+=num;
        }
       
        return res; 
    }

 

posted @ 2021-12-05 19:34  天道酬勤312  阅读(30)  评论(0)    收藏  举报