zoukankan      html  css  js  c++  java
  • 力扣1005题(K次取反后最大化的数组和)

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

    基本思想:

    贪心算法

    具体实现:

    局部最优:让绝对值大的负数变为正数

    整体最优:整个数组和达到最大

    局部最优:让绝对值小的正数变为负数

    整体最优:整个数组和达到最大

    1.将数组按照绝对值大小从大到小排序

    2.遍历数组,遇到负数将其变为正数,同时k--

    3.k还大于0的话,让反复转变数值小的元素,将k用完

    4.求和

    代码:

    class Solution {
        public int largestSumAfterKNegations(int[] nums, int K) {
            int sum = 0;
            int n = nums.length;
            Integer[] sortNums = new Integer[n];
            for(int i = 0; i < n; i++) 
                sortNums[i] = nums[i];//new Integer(nums[i]);自动装箱
            Arrays.sort(sortNums, (a,b)->{//逆序排序
                    return Math.abs(b) - Math.abs(a);
                });
            for (int i = 0; i < n; i++) {
                if (sortNums[i] < 0 && K > 0) {
                    sortNums[i] *= -1;
                    K--;
                }
            }
            if (K != 0) {//这时sortNums数组中都是正数,如果剩下的k是奇数,让最后一个数变负数
                sortNums[n - 1] = (K % 2 == 1) ? (-sortNums[n - 1]) : sortNums[n - 1];
            }
            for (int i = 0; i < n; i++) {
                    sum += sortNums[i];
            }  
            return sum;    
        }
  • 相关阅读:
    Windows各个文件夹介绍
    Zabbix使用外部命令fping处理ICMP ping的请求
    QT 样式表实例
    QT 样式表基础知识
    cocos2d-js入门一
    try throw catch typeid
    cocos2d-x入门三 分层设计框架
    cocos2d-x入门二 helloworld实例运行与创建
    cocos2d-x入门一
    批量操作QT UI中的控件
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/15440759.html
Copyright © 2011-2022 走看看