1005. K 次取反后最大化的数组和 && 增强for循环(foreach循环)遍历数组

2023-12-19

原题链接:

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

https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/

完成情况:

在这里插入图片描述

在这里插入图片描述

解题思路:

    /*  变化思路:
            优先选择负数进行变正
            如果还不够则考虑选择绝对值最小的正数,来回变化,抵消剩余次数。
     */
    // TODO 可以考虑使用Arrays.sort()  找出可以变成负数的值,同时看看数量是否有多;有多,则Math.abs()交替
    //  如果前k个数全部小于0,直接反转,如果k有剩余,则反转最小值

参考代码:

_1005K次取反后最大化的数组和

package 代码随想录.贪心算法;

import java.util.Arrays;

public class _1005K次取反后最大化的数组和 {
    /**
     *
     * @param nums
     * @param k     k为固定需要变化K次
     * @return
     */
    public int largestSumAfterKNegations(int[] nums, int k) {
        /*  变化思路:
                优先选择负数进行变正
                如果还不够则考虑选择绝对值最小的正数,来回变化,抵消剩余次数。
         */
        // TODO 可以考虑使用Arrays.sort()  找出可以变成负数的值,同时看看数量是否有多;有多,则Math.abs()交替
        //  如果前k个数全部小于0,直接反转,如果k有剩余,则反转最小值
        Arrays.sort(nums);
        int minValue = Integer.MAX_VALUE;
        for (int i = 0; i <nums.length; i++){
            if (k==0){
                break;
            }
            if (nums[i] < 0){
                nums[i] = -nums[i];
                k--;
            }
            if (minValue > nums[i]){
                //如果当前绝对值比minValue小
                minValue = nums[i];
            }
        }
        int result = 0;
        if (k%2==0){
            for (int num:nums){
                result+=num;
            }
        }else {
            for (int num:nums){
                result+=num;
            }
            result-=(2*minValue);
        }
        return result;
    }
}

_1005K次取反后最大化的数组和_简洁写法

package 代码随想录.贪心算法;

import java.util.Arrays;

public class _1005K次取反后最大化的数组和_简洁写法 {
    /**
     *
     * @param nums
     * @param k
     * @return
     */
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        for (int num : nums) {
            if (k>0 && num < 0){
                num = -num;
                k--;
            }
        }
        Arrays.sort(nums);
        return Arrays.stream(nums).sum() - (k%2 == 0 ? 0 : nums[0] * 2);
    }
}

错误经验吸取

如图所示:
在这里插入图片描述
在这里插入图片描述

增强for循环(foreach循环)遍历数组

在第二个示例中,使用增强for循环(foreach循环)遍历数组时,你不能直接修改数组中的元素。增强for循环是只读的,无法通过这种方式修改数组元素的值。因此,对 num 的修改不会影响到原始数组。

如果你想修改数组元素的值,建议使用普通的for循环,就像你在第一个示例中所做的那样。

如果你希望在增强for循环中修改数组元素的值,可以使用数组索引,类似于以下方式:

for (int i = 0; i < nums.length; i++) {
    int num = nums[i];
    if (k > 0 && num < 0) {
        nums[i] = -1 * num;
        k--;
    }
}

这样就能在增强for循环中修改原始数组的元素值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1005. K 次取反后最大化的数组和 && 增强for循环(foreach循环)遍历数组 的相关文章

  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何

随机推荐