K 次取反后最大化的数组和【贪心算法】

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

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。

重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

以这种方式修改数组后,返回数组 可能的最大和 。

java 复制代码
class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        //首先进行按绝对值排序(需要熟悉用法)
        nums = IntStream.of(nums)
		     .boxed()
		     .sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1))
		     .mapToInt(Integer::intValue).toArray();

        int len = nums.length;

        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0 && k > 0) {//对其中的绝对值较大的负数进行反转,变为正数
                nums[i] = - nums[i];
                k--;
            }
        }
        if (k % 2 == 1) {//如果K仍有剩余,取绝对值最小的一个元素进行反复取反;另外注意:k为偶数两次取反抵消,无需操作,k为奇数,相当于取反依次
            nums[len - 1] = - nums[len - 1];
        }
        return Arrays.stream(nums).sum();
    }
} 

关于 nums = IntStream.of(nums).boxed().sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1)).mapToInt(Integer::intValue).toArray(); 这行代码,让我们一步一步解释它的作用:

  1. IntStream.of(nums):将原始的 int 数组转换为 IntStream,这是Java 8中的一个流。这是为了使我们能够在流上进行后续操作。

  2. .boxed():将 IntStream 中的每个元素装箱为 Integer 对象。这是因为后续的排序操作需要使用比较器,而比较器需要处理对象。

  3. .sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1)):对流中的元素进行排序。这里使用了一个比较器,该比较器会按照元素的绝对值从大到小进行排序。

    • (o1, o2) -> Math.abs(o2) - Math.abs(o1) 是一个Lambda表达式,它描述了如何比较两个元素 o1o2
    • Math.abs(o2) - Math.abs(o1) 计算的是两个元素绝对值的差值,这用于指示排序顺序。
  4. .mapToInt(Integer::intValue):将排序后的 Integer 对象流转换回 IntStream

  5. .toArray():将排序后的 IntStream 转换回 int 数组。

这行代码的最终作用是:将原始的 int 数组按绝对值从大到小排序后,以 int 数组的形式返回。这个排序后的数组将在后续的处理中被使用。

相关推荐
超级大坏蛋201839 分钟前
QT .pro文件的常见用法
java·linux·qt
祈祷苍天赐我java之术7 小时前
Linux 进阶之性能调优,文件管理,网络安全
java·linux·运维
无处不在的海贼8 小时前
小明的Java面试奇遇之发票系统相关深度实战挑战
java·经验分享·面试
武子康8 小时前
Java-109 深入浅出 MySQL MHA主从故障切换机制详解 高可用终极方案
java·数据库·后端·mysql·性能优化·架构·系统架构
秋难降8 小时前
代码界的 “建筑师”:建造者模式,让复杂对象构建井然有序
java·后端·设计模式
mit6.8248 小时前
8.27 网格memo
c++·算法
jeffery8928 小时前
4056:【GESP2403八级】接竹竿
数据结构·c++·算法
BillKu9 小时前
Spring Boot 多环境配置
java·spring boot·后端
Ghost-Face9 小时前
图论基础
算法
默归9 小时前
分治法——二分答案
python·算法