很多记录者反馈昨天的题目:GreedyAlgorithm:JumpingGameII很难,所以我松了一口气,哈哈,因为我刚刚解释了greedy记录俱乐部给我的建议:有不用单独谈贪心,只谈运动规律。很多同学应该觉得自己就是贪心,所以没有什么难度。现在我们可以发现,贪婪原理虽然简单,但是解决问题却非常巧妙,难度和规则相差不大。今天是一道简单的题,关键是要培养贪心的解题思路!K次否定后最大化的数组和题地址:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/给定一个整数数组A,我们只能按以下方式修改数组:我们选择一些索引i并将A[i]替换为-A[i],并重复此过程总共K次。(我们可以多次选择同一个索引i。)这样修改数组后,返回数组的最大可能和。示例1:输入:A=[4,2,3],K=1输出:5解释:选择索引(1,),则A变为[4,-2,3]。示例2:输入:A=[3,-1,0,2],K=3输出:6解释:选择索引(1,2,2),则A变为[3,1,0,2]。示例3:输入:A=[2,-3,-1,5,-4],K=2输出:13解释:选择索引(1,4),则A变为[2,3,-1,5,4].Tips:1<=A.length<=100001<=K<=10000-100<=A[i]<=100这道题的思路其实比较好想,数组sum怎么算最大的?贪心思想,局部最优:让绝对值大的负数变成正数,当前值达到最大值。整体最优:整个数组的总和达到最大值。局部最优可以导致全局最优。那么如果把所有的负数都变成正数,K还是大于0。这时候的问题就是如何把正负数改K次,使得正整数有序序列的数组和最大化。然后又是一个贪心:局部最优:只找最小值的正整数进行反转,当前值可以达到最大值(比如正整数数组{5,3,1},反转1得到-1比反5得到-5多半出局),全局最优:整个数组求和到最大值。虽然你做这道题的时候可能不会想什么贪心算法,一下子就拿到AC了。“我其实就是来给大家展示一下经常被大家忽略的贪婪思维,这么简单的一道题,我用了两次贪心!”那么这道题的解法步骤是:第一步:将数组从Sort中从大到小进行划分,“注意绝对值的大小”第二步:从前向后遍历,遇到时转为正数为负数,K--第三步:如果K仍然大于0,则重复变化对于最小值的元素,用完K第四步:求和对应的C++代码如下:classSolution{staticboolcmp(inta,intb){returnabs(a)>abs(b);}public:intlargestSumAfterKNegations(vector
