每日OJ题_贪心算法二③_力扣1005. K 次取反后最大化的数组和

news2024/11/24 0:45:21

目录

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

解析代码


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

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

难度 简单

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

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

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

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

示例 1:

输入:nums = [4,2,3], k = 1
输出:5
解释:选择下标 1 ,nums 变为 [4,-2,3] 。

示例 2:

输入:nums = [3,-1,0,2], k = 3
输出:6
解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。

示例 3:

输入:nums = [2,-3,-1,5,-4], k = 2
输出:13
解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4] 。

提示:

  • 1 <= nums.length <= 10^4
  • -100 <= nums[i] <= 100
  • 1 <= k <= 10^4
class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {

    }
};

解析代码

贪心策略:可以先排序,然后分情况讨论,设整个数组中负数的个数为 m 个:

  • m > k :把前 k 小负数,全部变成正数;
  • m == k :把所有的负数全部转化成正数;
  • m < k :
  1. 先把所有的负数变成正数。
  2. 然后根据 k - m 的奇偶分情况讨论:如果是偶数,直接忽略,如果是奇数,挑选当前数组中最小的数,变成负
class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        int sz = nums.size(), Min = INT_MAX, sum = 0, m = 0; // m统计0和负数
        sort(nums.begin(), nums.end());
        for(int i = 0; i < sz; ++i)
        {
            sum += nums[i];
            Min = min(Min, abs(nums[i])); // 绝对值最小的数
            if(nums[i] <= 0)
                ++m;
        }
        if(m >= k)
        {
            for(int i = 0; i < k; ++i)
                sum -= 2 * nums[i]; // 最小的负数变正数,两倍
        }
        else // m < k
        {
            for(int i = 0; i < m; ++i) // 先把所有的负数变成正数
                sum -= 2 * nums[i];
            if((k - m) % 2 == 1) // 绝对值最小的数取反
                sum += 2 * -Min;
        }
        return sum;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能优化算法及 MATLAB 实现(书籍推荐)

智能优化算法及 MATLAB 实现&#xff08;书籍推荐&#xff09; 介绍前言目录第1章 粒子群优化算法原理及其MATLAB实现第2章 哈里斯鹰优化算法原理及其MATLAB实现第3章 沙丘猫群优化算法原理及其MATLAB实现第4章 鲸鱼优化算法原理及其MATLAB实现第5章 大猩猩部队优化算法原理及其…

大模型常用的预训练数据集

文章目录 通用网页数据中文网页数据书籍维基百科代码混合型数据集 与早期的预训练语言模型相比&#xff0c;大语言模型需要更多的训练数据&#xff0c;这些数据需要涵盖广泛的内容范围。多领域、多源化的训练数据可以帮助大模型更加全面地学习真实世界的语言与知识&#xff0c;…

基于缓存注解的时间戳令牌防重复提交设计

文章目录 一&#xff0c;概述二&#xff0c;实现过程1、引入pom依赖2、定义缓存管理3、时间戳服务类4、模拟测试接口 三&#xff0c;测试过程1&#xff0c; 模拟批量获取2&#xff0c; 消费令牌 四&#xff0c;源码放送五&#xff0c;优化方向 一&#xff0c;概述 API接口由于…

力扣面试150 简化路径 栈 模拟

Problem: 71. 简化路径 思路 &#x1f469;‍&#x1f3eb; 三叶题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public String simplifyPath(String path){ArrayDeque<String> d new ArrayDeque<>();…

SpringBoot-@Transactional注解失效

Transactional注解失效 Transactional失效场景 以下是一些常见导致Transactional注解失效的场景&#xff0c;配合相应的Java代码演示&#xff1a; 1、方法修饰符非公开&#xff08;非public&#xff09; Transactional注解失效的原因在于Spring事务管理器如何实现对事务的代…

【竞技宝】意甲:退出齐尔克泽争夺战!国米免签伊朗神锋!

博洛尼亚中锋齐尔克泽成为了意甲当红炸子鸡,不少豪门球队都希望可以签下他,目前对球员有意向的俱乐部包括AC米兰、尤文图斯、阿森纳、国际米兰和曼联,看到自家球员如此有市场,博洛尼亚方面咬死5000万欧元的价格不松口,想要得到他必须要拿出真金白银。不过意甲霸主国际米兰率先退…

C++:编程语言中的永恒经典与未来之星

在计算机科学的世界里&#xff0c;C无疑是一个不可忽视的存在。它以其卓越的性能、灵活的编程风格和广泛的应用领域&#xff0c;成为了众多程序员的首选语言。本文将探讨C的历史地位、当前应用以及未来的发展趋势&#xff0c;揭示其作为编程语言中的永恒经典与未来之星的魅力。…

【C++ —— 多态】

C —— 多态 多态的概念多态的定义和实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变&#xff1a;析构函数的重写 C11 override和final重载、覆盖(重写)、隐藏(重定义)的对比 抽象类概念接口继承和实现继承 多态的继承虚函数表多态的原理动态绑定和静态绑定 单继…

IntelliJ IDEA - Auto filling Java call arguments 插件教程

首先&#xff0c;安装该插件&#xff0c;下载完毕后重启 IDEA 当 userService 中方法需要参数的时候&#xff0c;我们一般都是自己手动写这些参数&#xff0c;是很费劲的。因此就出现了一个插件解决这类问题 Auto filling Java call arguments 光标点击需要填写参数的位置 Alt …

【CTF-Crypto】修复RSA证书入门汇总

证书修复 文章目录 证书修复基础知识Truncated 1Truncated 2Jumbled 基础知识 为什么要引入证书&#xff1f; 在正常题目中&#xff0c;大部分直接给出了数字&#xff0c;但是数字在现实世界中传输不稳定&#xff0c;容易在某处出现错误&#xff0c;所以我们将所有的数字信息…

【skill】远程连接的Win服务器,几分钟无操作就进入登录界面

远程连接的Win服务器&#xff0c;几分钟无操作就进入登录界面&#xff0c;这时候必须输入密码或者重新连接才能进到桌面 错误的解决方法&#xff1a; 与电源管理没半毛关系&#xff01;这是远程连接的Win服务器&#xff01; 根源是“屏保”的问题&#xff0c;所以正确、有效的…

【中断】【ARM64】学习总结

optee中的异常向量表解读–中断处理解读 https://mp.weixin.qq.com/s/gBsy4YDYTHGRsy2zcVr6Vg

一键切换ip地址的软件哪个好用

随着互联网的快速发展&#xff0c;IP地址的重要性日益凸显。它不仅代表着每台设备在网络上的唯一标识&#xff0c;还关乎到我们的网络隐私、访问权限以及工作效率。一键切换IP地址的软件应运而生&#xff0c;为我们提供了极大的便利。那么&#xff0c;在众多选择中&#xff0c;…

使用jdbc方式操作ClickHouse

1、创建测试表&#xff0c;和插入测试数据 create table t_order01(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);insert into t_order01 values …

2024年UX/UI发展趋势

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 2023年是科技创新的一年&#xff1a;我们见证了苹果虚拟眼镜的推出、人工智能驱动的衍生式设计的兴起以及三星的可折叠智能手机。网络现在融入了越来越多明亮且对比…

前沿科技应用:AIGC技术的广泛渗透

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【redis】redix在Linux下的环境配置和redis的全局命令

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

Apache SSI远程命令执行漏洞

什么是SSI Apache SSI&#xff08;Server Side Include)&#xff0c;通常称为"服务器端嵌入"或者叫"服务器端包含"&#xff0c;是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。 从技术层面来讲&#xff0c;SSI是一种在静…

微服务架构下规范实践-研发管理

微服务架构下规范 目录概述需求&#xff1a; 设计思路实现思路分析3.代码托管 4.统计分析 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change…

机器学习:深入解析SVM的核心概念【四、软间隔与正则化】

软间隔与正则化 问题一&#xff1a;优化目标函数是如何得到的&#xff1f;得到的过程是怎样的&#xff1f;问题二&#xff1a;拉格朗日乘子法计算详细过程问题三&#xff1a;KKT条件求解过程问题四&#xff1a;结构风险最小化&#xff08;SRM&#xff09;的原理 在前面的讨论中…