首页 > 其他分享 >LeetCode 1005.K 次取反后最大化的数组和

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

时间:2023-03-17 17:56:09浏览次数:38  
标签:下标 nums int 取反 len 数组 1005 LeetCode

题目描述:

给你一个整数数组 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] 。

 

题解:


public int largestSumAfterKNegations(int[] nums, int k) {
       // 首先要为大的值取反,先对nums数组按照绝对值从大到小排序
       nums = IntStream.of(nums) //转换成IntStream流
                      .boxed()  //int -> Integer
                      .sorted((a, b) -> Math.abs(b) - Math.abs(a)) //排序
                      .mapToInt(Integer::intValue).toArray();
       int len  = nums.length;
       for (int i = 0; i < len; i++) {
           if (nums[i] < 0 && k > 0) {
               nums[i] = -nums[i];
               k--;
          }
      }
       // k的最大值和数组长度是一样长的,遍历完数组k还不为0,这时候就要判断,如果k是偶数,其实不用管,一个数来回反转偶数次,还是它自己。如果是奇数,就要管了,这是就可以把绝对值最小的那个数取反,代价最小。
       if (k % 2 == 1) nums[len-1] = - nums[len-1];
       return IntStream.of(nums).sum();
  }

 

标签:下标,nums,int,取反,len,数组,1005,LeetCode
From: https://www.cnblogs.com/dongone/p/17227692.html

相关文章

  • 【LeetCode贪心#07】分糖果
    发糖果力扣题目链接(opensnewwindow)老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些......
  • LeetCode|412. Fizz Buzz
    题目链接:412.FizzBuzz给你一个整数n,找出从1到n各个整数的FizzBuzz表示,并用字符串数组answer(下标从1开始)返回结果,其中:answer[i]=="FizzBuzz"如果i......
  • LeetCode|1672. 最富有客户的资产总量
    题目链接:1672.最富有客户的资产总量难度简单173收藏分享切换为英文接收动态反馈给你一个mxn的整数网格accounts,其中accounts[i][j]是第i位客户在第j家银......
  • 【LeetCode贪心#06】加油站(股票买卖变种)
    加油站力扣题目链接(opensnewwindow)在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油......
  • 代码随想录Day2-Leetcode977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
    977.有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/最初想法是用二分找到恰好大于0的数;然后数组切片,负的一方反转,然后按照合并......
  • LeetCode1. 两数之和
    题目描述:给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应......
  • 【leetcode】226.翻转二叉树
    翻转二叉树leetcode题目传送门题目描述思路按顺序依次交换二叉树的左右节点实现交换左右节点,递归遍历publicclassTreeNode{publicintval;......
  • LeetCode 18. 四数之和
    classSolution{public:vector<vector<int>>fourSum(vector<int>&nums,inttarget){vector<vector<int>>ans;longlongtmp=target;......
  • LeetCode1024 -- 二分
    1.题目描述查找满足劳累天数严格大于不劳累天数的最大子区间2.思路对于区间问题,很容易先想到前缀和帮助我们优化。我们可以设,劳累=\(1\),不劳累=\(-1\),那么,就是求......
  • Leetcode202. 快乐数
    题目描述:编写一个算法来判断一个数n是不是快乐数。「快乐数」 定义为:•对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。•然后重复这个过程直到这个......