版权声明:此BLOG为个人BLOG,内容均来自原创及互连网转载。最终目的为记录自己需要的内容或自己的学习感悟,不涉及商业用途,转载请附上原博客。 https://blog.csdn.net/bulo1025/article/details/88952382
题目描述
给定一个整数数组 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]。
思路分析
- 参考了讨论区中一位老哥的思路:采用递归的思想
- 每次取反,肯定是取最小的一个数取反,如果这个数是负数,取反后绝对值肯定也大,得到的和肯定是最大的;如果最小的数为正数,取反后为负数,减小的数也是最小的,保证了数组和是最大的
代码示例
class Solution(object):
def largestSumAfterKNegations(self, A, K):
"""
:type A: List[int]
:type K: int
:rtype: int
"""
A[A.index(min(A))] *= -1
if K == 1:
return sum(A)
else:
return self.largestSumAfterKNegations(A,K-1)
2019年4月1日 于理教 愚人节,做题目好痛苦