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;    
        }
  • 相关阅读:
    ZOJ 2859 Matrix Searching
    URAL 1102. Strange Dialog
    ZOJ 1986 Bridging Signals
    POJ 3233 Matrix Power Series
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    ZOJ 3471 Most Powerful
    IIS:HTTP 错误 403.9 禁止访问:连接的用户过多
    使用Command对象执行数据库操作
    C#类型转换
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/15440759.html
Copyright © 2011-2022 走看看