LeetCode 1005. K 次取反后最大化的数组和 java题解

news/2025/3/18 19:22:50/

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

看着简单但是写si人的一题。

java">class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);//排序int last_negative=-1,first_positive=-1;//最后一个负数位置,第一个正数位置//计数int count_zero=0;int count_negative=0;int count_positive=0;for(int i=0;i<nums.length;i++){if(nums[i]<0){//负数last_negative=i;count_negative++;}else if(nums[i]>0){//正数if(count_positive==0){//前面,没有出现过正数first_positive=i;}count_positive++;}else{//0count_zero++;}}//开始变化if(count_negative>=k){//1.有足够的负数。负数变正数。for(int i=0;i<k;i++){//修改k次nums[i]=-nums[i];}}else if(0<count_negative&&count_negative<k){//2.有负数,但不够。//先修改已有的负数for(int i=0;i<count_negative;i++){//从前到后,修改所有负数。剩下的交给0nums[i]=-nums[i];}      int left=k-count_negative;//还需要修改的次数if(left%2==0){// 2.1 还剩下偶数次//不用改了}//2.2 有零。修改0else if(count_zero>0){//也可以说不用改了}else{//2.3 有负数,但不够,还剩奇数次,还没有0int a=Integer.MAX_VALUE;int b=Integer.MAX_VALUE;if(count_positive>0){//有正数a=nums[first_positive];}if(count_negative>0){b=nums[last_negative];}//取绝对值小的数if(Math.abs(a)<Math.abs(b)){nums[first_positive]=-nums[first_positive];}else{nums[last_negative]=-nums[last_negative];}}}else if(count_negative==0){//3.没有负数if(count_zero!=0){//3.1 有零。不用改了。}else{//3.2 没有零。if(k%2==0){//偶数次,变回自己//不用改了}else{//修改最小的正数if(count_positive!=0){nums[first_positive]=-nums[first_positive];}}}}int sum=0;for(int num:nums)sum+=num;return sum;}
}
/**
把负数变成正的,下标越小越好
不想继续改变,如果有0,就改变0
把正数变成负的,下标越小越好
变k次,可以多次选择同一个下标。*/

网上的思路

第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
第二步:从前向后遍历,遇到负数将其变为正数,同时K–
第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
第四步:求和


http://www.ppmy.cn/news/1580137.html

相关文章

单元测试、注解

目录 一、单元测试1.快速入门2.Junit在实际开发中的用法 二、注解1.注解概述2.自定义注解3.元注解4.解析注解 一、单元测试 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法。因此&#xff0c;单元测试就是针对Java方法的测试&#xff0…

泰山派开发之—Ubuntu24.04下Linux开发环境搭建

简介 最近翻到了吃灰已久的泰山派&#xff0c;是刚出来的时候用优惠券买的&#xff0c;当时价格挺便宜的&#xff0c;最近给它翻出来了&#xff0c;打算试试做个项目。买的泰山派容量是2G16G&#xff0c;SOC芯片使用的是RK3566&#xff0c;搭载1TOP算力的NPU&#xff0c;并且具…

【前端面试题】宏任务与微任务的区别

宏任务与微任务的区别 JavaScript采用单线程模型&#xff0c;通过 事件循环&#xff08;Event Loop&#xff09; 机制处理异步操作。 类比于厨师上菜的过程&#xff0c;顾客点的菜可能存在容易处理的 “软菜” 与难处理的 “硬菜” &#xff0c;以及要加米饭酒水这些立马可以上…

【拓扑排序】火星词典

文章目录 LCR 114. 火星词典解题思路&#xff1a;拓扑排序 LCR 114. 火星词典 LCR 114. 火星词典 ​ 现有一种使用英语字母的外星文语言&#xff0c;这门语言的字母顺序与英语顺序不同。 ​ 给定一个字符串列表 words &#xff0c;作为这门语言的词典&#xff0c;words 中的…

【CSS】二、浏览器调试与文字样式

文章目录 1、谷歌调试前端代码2、文字属性控制2.1 字体大小2.2 字体粗细2.3 字体倾斜2.4 行高2.5 字体族2.6 复合属性2.7 文本缩进2.8 文本对齐方式2.9 文本修饰线2.10 文字颜色 3、练习 1、谷歌调试前端代码 CommandOptionI或者F12打开开发者模式&#xff0c;选中元素栏Eleme…

Android 数据持久化之 SharedPreferences 存储

1、概述 SharedPreferences 是 Android 提供的一种轻量级存储类&#xff0c;用于存储简单的键值对数据。它非常适合保存应用的配置信息、用户偏好设置等。SharedPreferences支持数据类型String、int、float、long、boolean、Set&#xff08;字符串集合&#xff09;&#xff0c…

Secs/Gem第二讲 (基于secs4net项目的ChatGpt介绍)

好的&#xff0c;我们正式进入&#xff1a; 第二讲&#xff1a;深入 SECS4NET 项目结构——主机程序是怎么搭起来的&#xff1f; 关键词&#xff1a;项目结构、类图、通信类、事件处理、连接生命周期、异步机制 本讲目的 我们从源码入手&#xff0c;一步步搞懂&#xff1a; S…

【品铂科技】在高精度定位行业内的口碑怎么样?

1. ‌技术实力与行业认可‌ 公司自主研发的ABELL无线实时定位系统在复杂环境中&#xff08;如工业、司法监狱等&#xff09;展现出厘米级&#xff08;5-10厘米&#xff09;高精度定位能力&#xff0c;客户反馈系统稳定性强、抗干扰能力突出&#xff0c;成为行业技术标杆‌。参…