给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组 可能的最大和 。示例 1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为...
1)函数比较器: classSolution{public://输入两个数a和b,如果abs(a)>abs(b),返回true,排序后是 a,b//如果abs(a)<=abs(b),返回false,排序后是 b,astaticboolcmp(inta,intb){returnabs(a)>abs(b);}intlargestSumAfterKNegations(vector<int>&nums,intk){intn=nums.size();intresult=0;//先将数...
public static void main(String[] args) { TX7K次取反后最大化的数组和 s = new TX7K次取反后最大化的数组和(); System.out.println(s.largestSumAfterKNegations(new int[]{2, -3, -1, 5, -4}, 2)); System.out.println(s.largestSumAfterKNegations(new int[]{7, 8, -4, -7, -5...
K次取反后最大化的数组 力扣题目链接 局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。 如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让数组和 达到最大。 那么又是一个贪心:局部最优:只找数值最小的正整数进行反转,当前数值...
算法题:K 次取反后最大化的数组和(典型的贪心算法问题),1、首先排序,然后从最小的负数开始一一变为正数,如果遍历到正数了,而k的次数没用完,如果剩余的k是偶数次,则
1005.K次取反后最大化的数组和 贪心的思路,局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。 局部最优可以推出全局最优 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小 第二步:从前向后遍历,遇到负数将其变为正数,同时K-- ...
1.按照绝对值降序排序数组A 2.对负数/非正数执行取反操作 3.如果K的剩余次数为奇数,将绝对值最小的元素取反 4.计算数组A的元素和 点击查看代码 class Solution: def largestSumAfterKNegations(self, nums: List[int], k:int)->int: nums.sort(key=lambda x:abs(x),reverse=True)foriinrange(len(nums...
{//当前终点不是数组终点cur_cover=max_cover; res++; } }returnres; } } 1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 classSolution{voidselectSort(inta[],intn){for(inti=0; i < n -1; i++) {intmax=i;for(intj=i +1; j < n; j++) ...
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能的最大和 。 示例1: 输入:nums = [4,2,3], k = 1 输出:5 解释:选择下标 1 ,nums 变为 [4,-2,3] 。 示例2: 输入:nums = [3,-1,0,2], k = 3 ...