贪心算法day05(k次取反后最大数组和 田径赛马)

devtools/2024/11/13 23:22:17/

目录

1.k次取反后最大化的数组和

2.按身高排序

 3.优势洗牌


1.k次取反后最大化的数组和

题目链接:. - 力扣(LeetCode)

思路:

代码:

class Solution {public int largestSumAfterKNegations(int[] nums, int k) {//如何找到最小的数字并且将最小的数字重新放回数组中比较//分情况讨论  如果操作次数小于负数的个数 就不需要将更改的数字从新添加进行比较,只需要将数组从小到大排序后依次取放相加//如果操作次数大于负数的个数 那么也不需要将更改的数字从新添加进行比较// 只需要在最开始的时候找到数组全为正数时的最小值 接着对负数全部取反变为正数相加 剩下的奇数次操作只需将之前找出的数组正数最小值取反一次就好int n = nums.length,min = Integer.MAX_VALUE,m = 0;for(int x:nums){if(x < 0)m++;min = Math.min(min,Math.abs(x));//正数中的最小值}int ret = 0;//操作次数较少时,把最小的负数变为正数//怎么找出较小负数 这里使用sort排序来解决if(m > k){Arrays.sort(nums);//对数组进行排序for (int i = 0; i < k; i++) {ret+=-nums[i];}for (int i = k; i < n; i++) {ret+=nums[i];}}else{//把负数全部变成正数for(int x:nums) ret += Math.abs(x);//如果是偶数不进行处理 正数操作偶数次还是正数if((m - k)% 2 != 0){ret -= min*2;}}return ret;}
}

2.按身高排序

题目链接:. - 力扣(LeetCode)

 思路:

class Solution {public String[] sortPeople(String[] names, int[] heights) {int n = names.length;Integer[] index = new Integer[n];//创建一个下标数组for (int i = 0; i < n; i++) {index[i] = i;}//将下标按照身高降低进行排序Arrays.sort(index,(i,j)->{return heights[j] - heights[i];});//提取结果String[] ret = new String[n];for (int i = 0; i < n; i++) {ret[i] = names[index[i]];}return ret;}}

 3.优势洗牌

题目链接:. - 力扣(LeetCode)

思路:

为什么要创建一个下标数组,因为排序之后对应的最大优势nums1与最后输出结果不同,最后结果是按照未排序时的nums2对应的最大优势时的nums1。

如果在比较过程中出现相等的情况也是按照比不过处理直接拖累最强的一个

代码:

  public int[] advantageCount(int[] nums1, int[] nums2) {int n = nums1.length;Arrays.sort(nums1);Integer[] index2 = new Integer[n];for (int i = 0; i < n; i++) {index2[i] = i;}Arrays.sort(index2,(i,j)->{return nums2[i] - nums2[j];});int left = 0,right = n - 1;int[] ret = new int[n];for (int x:nums1) {if(x > nums2[index2[left]]){ret[index2[left++]] = x;}else{ret[index2[right--]] = x;}}return ret;}


http://www.ppmy.cn/devtools/133343.html

相关文章

详解 Dockerfile:从入门到实践

Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者将应用及其依赖包打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器或 Windows 机器上&#xff0c;也可以实现虚拟化。Dockerfile 是一个文本文件&#xff0c;其中包含了一系列命令&#xff0c;用…

map映射

一、Scala的map的分类&#xff1a;不可变&#xff0c;可变 二、Scala的map的常见操作&#xff1a;添加元素&#xff0c;删除元素&#xff0c;查询元素&#xff0c;修改元素&#xff0c;遍历。 三、Scala的不可变map 查询有两种方法&#xff1a;①get方法.输入key,如果找到,就…

微信小程序运营日记(第四天)

2024年11月6日-星期三-2024年45周 {微信小程序的时间板块进行一个增加&#xff0c;增加&#xff1a;2024年第45周|共53周&#xff0c;星期三&#xff0c;今年时间剩余&#xff0c;本周时间剩余} 开源竞争&#xff1a; 开源竞争&#xff08;当你无法掌握一个技术就开源这个技术…

简简单单的UDP

前言 上一篇了解了TCP的三次握手过程&#xff0c;目的、以及如何保证可靠性、序列号与ACK的作用&#xff0c;最后离开的时候四次挥手的内容&#xff0c;这还只是TCP内容中的冰山一角&#xff0c;是不是觉得TCP这个协议非常复杂&#xff0c;这一篇我们来了解下传输层另外一个协…

PyQt5入门级超详细教程中篇

PyQt5入门级超详细教程 中篇&#xff1a;信号槽机制与表格数据展示 接上篇&#xff1a; 第4部分&#xff1a;事件处理与信号槽机制 4.1 什么是信号与槽&#xff1f; 在 PyQt5 中&#xff0c;信号&#xff08;Signal&#xff09; 和 槽&#xff08;Slot&#xff09; 是处理事…

conda环境迁移,修改conda路径(附带脚本)

方法1 现将文件夹移动到对应用户的~目录下&#xff08;或其他目录&#xff09;mv /home/asushiro/miniconda3 /root/miniconda3建立软链接 然后创建软链接&#xff0c;相当于快捷方式ln -s /root/miniconda3 /home/aushiro/miniconda3方法2 将对应miniconda中的文件路径全部改…

golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证

我们已经展示了,给定生成点 G,并选择一个足够大的标量 e,我们可以轻松计算出 P=e*G,但是当你拥有 G 和 P 时,几乎不可能得到 e。这是椭圆曲线加密的基础。 所选择的标量 k 被称为私钥,而 Q 是公钥。注意,k 是一个256位的整数,而 Q 包含两部分:一个是 x 坐标,另一个是…

联合物种分布模型HMSC开展单物种和多物种分析技术细节及HMSC包的实际应用;群落生态学数据分析、物种分布预测、假说验证等

目录 专题1&#xff1a;R/Rstudio简介及入门 夯实基础 专题2&#xff1a;群落生态学及数据统计分析概述 专题3&#xff1a;联合物种分布模型Hmsc及群落数据贝叶斯统计 专题4&#xff1a;单物种&#xff08;物种水平&#xff09;/单变量Hmsc贝叶斯统计 专题5&#xff1a;多…