代码随想录day34 | 贪心算法P3 | ● 1005 ● 134 ● 135

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] 。

思路

这道题的贪心策略非常好想 但如果不会Java 按照绝对值排序 就会比较麻烦

默认排序

class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);int index = -1;for(int i = 0; i < nums.length; i++){if(nums[i] >= 0){index = i;break;}}if(index == -1){for(int i=0; i < k && i < nums.length; i++){nums[i] *= -1;}if(k <= nums.length) {return getSum(nums);}else{if((k-nums.length)% 2 == 0){return getSum(nums);}else{Arrays.sort(nums);nums[0] *= -1;return getSum(nums);}}}else if(index == 0){if(k % 2 == 0){return getSum(nums);}else{nums[0] *= -1;return getSum(nums);}}else{//index 首个非负数的下标 代表 负数个数if(index <= k){for(int i = 0; i < index; i++ ){nums[i] *= -1;}Arrays.sort(nums);if((k - index) % 2 == 0) return getSum(nums);else{nums[0] *= -1;return getSum(nums);}}else{for(int i = 0; i < k; i++ ){nums[i] *= -1;}return getSum(nums);}}}public int getSum(int [] nums){int sum = 0;for(int i : nums){sum += i;}return sum;}
}

绝对值排序

  • 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
  • 第二步:从前向后遍历,遇到负数将其变为正数,同时K--
  • 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
  • 第四步:求和
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 < len; i++) {//从前向后遍历,遇到负数将其变为正数,同时K--if (nums[i] < 0 && K > 0) {nums[i] = -nums[i];K--;}}// 如果K还大于0,那么反复转变数值最小的元素,将K用完if (K % 2 == 1) nums[len - 1] = -nums[len - 1];return Arrays.stream(nums).sum();}
}

134. 加油站

135. 分发糖果  

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

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

相关文章

机器人客户端如何配置同步消息至多个群中

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 由于微信群的人数&#xff0c;最多是500人&#xff0c;如果有人的业务做的大&#xff0c;可能会同步创建好多个群&#xff0c;但是资料的不想多个群一起发&#xff0c;发给某个群&a…

[计算机网络] 当输入网址到网页

HTTP 首先&#xff0c;对URL进行解析&#xff0c;URL包含了Web服务器和对应的文件&#xff08;文件路径&#xff09; URL是请求服务器中的文件资源 通过Web服务器和对应文件来生产HTTP包&#xff08;超文本传输协议&#xff09; DNS 根据域名查询对应的IP地址 域名的层级 根…

下一代分层存储方案:CXL SSD

近日&#xff0c;在Memcon 2024大会上&#xff0c;三星推出了一款名为CXL Memory Module-Hybrid for Tiered Memory&#xff08;CMM-H TM&#xff09;&#xff0c;这款扩展卡配备了高速DRAM和NAND闪存&#xff0c;允许CPU和加速器远程访问额外的RAM和闪存资源。 那么&#xff0…

Kafka 线程模型痛点攻克: 提升分区写入 2 倍性能

01 引言 单分区写入在一些需要全局顺序消息的场景中具备重要应用价值。在一些严格保序场景下&#xff0c;需要将分区数设置为 1&#xff0c;并且只用单个生产者来发送数据&#xff0c;从而确保消费者可以按照原始顺序读取所有数据。此时&#xff0c;Kafka 的单分区写入性能将会…

Data Shapley Value 笔记

本文为 Data Shapley: Equitable Valuation of Data for Machine Learning 的阅读笔记&#xff0c;涉及论文中的 Data Shapley Value 计算公式、两种实现算法、实验应用部分的梳理。 为理解 Data Shapley Value&#xff0c;本文首先讨论 Shapley Value的相关内容&#xff0c;利…

Python基于Django的微博热搜、微博舆论可视化系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

K8s学习九(配置与存储_存储)

存储管理 Volumes HostPath 将节点上的文件或目录挂载到 Pod 上&#xff0c;此时该目录会变成持久化存储目录&#xff0c;即使 Pod 被删除后重启&#xff0c;也可以重新加载到该目录&#xff0c;该目录下的文件不会丢失 效果就是容器里的数据和主机里的数据进行共享 配置文…

蓝桥杯gcd汇总

gcd3014 问题描述 小明和小红是一对恋人&#xff0c;他们相爱已经三年了&#xff0c;在今年的七夕节&#xff0c;小明准备给小红一个特殊的礼物。他想要送给小红一些数字&#xff0c;让小红算出有多少对正整数 (a,b) 满足以下条件&#xff1a; clcm(a,b)−dgcd(a,b)x其中 c,…

JS-25-浏览器和浏览器对象

一、浏览器 由于JavaScript的出现就是为了能在浏览器中运行&#xff0c;所以&#xff0c;浏览器自然是JavaScript开发者必须要关注的。 目前主流的浏览器分这么几种&#xff1a; IE 6~11&#xff1a;国内用得最多的IE浏览器&#xff0c;历来对W3C标准支持差。从IE10开始支持E…

无人售货奶柜:开启便捷生活的新篇章

无人售货奶柜&#xff1a;开启便捷生活的新篇章 在这个快节奏的现代生活中&#xff0c;科技的革新不仅为我们带来了前所未有的便利&#xff0c;更在不经意间改变着我们的日常。其中&#xff0c;无人售货技术的出现&#xff0c;尤其是无人售货奶柜&#xff0c;已经成为我们生活…

项目管理中的估算活动资源

在项目管理中,资源估算是一项至关重要的任务。正确地估算活动资源可以确保项目的顺利进行,避免资源浪费和不必要的延误。以下是对项目管理中常见的活动资源类型的详细分析。 一、人力资源 人力资源是项目管理中最基本的资源之一。它包括项目团队成员的技能、知识和经验。在…

Java Web

1.GET方式请求 (1).普通URL get请求 1 2 3 http://localhost:8080/ajaxGet?id1&username用户名&userTrueName真实姓名 //get也可以传json,通过参数传json字符串,然后后端进行解析(不过一般都不这么做) http://localhost:8080/ajaxGet?user{"id":"1&…

【C语言】函数相关选择题

前言 关于函数相关的选择题。 题目一&#xff1a; C语言规定&#xff0c;在一个源程序中&#xff0c;main函数的位置&#xff08; &#xff09; A .必须在最开始 B .必须在库函数的后面 C .可以任意 D .必须在最后 题解&#xff1a;选择C。 main函数为C语言中整个工程的程序入…

ngnix的反向代理是什么?有什么作用?

1、Nginx的反向代理是什么&#xff1f; Nginx的反向代理是一种网络架构模式&#xff0c;其中Nginx服务器作为前端服务器&#xff0c;接收客户端的请求&#xff0c;然后将这些请求转发给后端服务器&#xff08;例如Java应用程序服务器&#xff09;。在这个过程中&#xff0c;客…

北京--面试1(设计模式、反射、队列、线程、锁、Linux命令、JVM调优参数)

1、写三个设计模式&#xff08;代码&#xff09; //单例懒汉模式&#xff1a;单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点。在Java中&#xff0c;单例模式被广泛用于控制资源访问&#xff0c;配置管理器等场景。实现单例模式的方式包括懒汉式、饿汉式、双…

Leetcode56_合并区间

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数…

Stable Diffusion|Ai赋能电商 Inpaint Anything

1. 背景介绍 随着人工智能技术的不断发展&#xff0c;其在电商领域的应用也越来越广泛。其中&#xff0c;图像修复技术在电商领域有着重要的应用价值。例如&#xff0c;在商品图片处理中&#xff0c;去除图片中的水印、瑕疵等&#xff0c;可以提高商品图片的质量和美观度。 2…

牛顿:Archetype AI 的开创性模型,实时解读真实世界的新宠儿

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

kafka命令行高级命令

#--time -1 查看topic各个partition 未过期最早offset --time -2 最后offest&#xff0c;根据二者差值计算存量数据 sh /usr/local/kafka9092/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --bootstrap-server xxxxx:9092 --topic __consumer_offsets --time -1 #查…

不同系统锁库存的实现方式

目录 1. 系统内部实现锁库存 2. 使用中间件实现锁库存 3. 服务化实现锁库存 4. 分布式事务实现锁库存 1. 系统内部实现锁库存 描述&#xff1a;系统采用内部机制&#xff0c;如数据库事务、行锁或乐观锁等技术&#xff0c;来在必要的时候锁定库存。特点&#xff1a;实现细…