LeetCode刷题记录——第1005题(K次取反后的最大的数组和)

版权声明:此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日 于理教 愚人节,做题目好痛苦

猜你喜欢

转载自blog.csdn.net/bulo1025/article/details/88952382
今日推荐