算法题:K 次取反后最大化的数组和(典型的贪心算法问题)
  DosddciaWHNX 2023年11月02日 26 0


这道题没有看题解,直接提交,成绩超越99.5%,说明思路是优的。就是考虑的情况里面弯弯绕比较多,需要考虑全面一点。(本题完整题目附在了最后面)

具体思路如下:

1、首先排序,然后从最小的负数开始一一变为正数,如果遍历到正数了,而k的次数没用完,如果剩余的k是偶数次,则直接可以退出了;如果k是奇数次且nums内有0元素也可以直接退出程序;如果k是奇数次且nums里面没有0元素,则挑一个最小的正数,将其置为负数,其实也就是比较正在遍历到的数和前一个数的大小,小的那个就是nums数组里的最小正数。

2、还有一种情况就是,数组已经遍历完了,k没用完,这个也很简单,直接对数组的最后一个数,也就是数组里面最小非负数进行操作,如果其为0则直接退出,如果是k是偶数也可直接退出,如果k是奇数则将这个数置为负数。

3、最后对nums数组求和。

算法题:K 次取反后最大化的数组和(典型的贪心算法问题)_leetcode

代码如下:

class Solution(object):
    def largestSumAfterKNegations(self, nums, k):
        nums.sort()
        for i in range(len(nums)):
            if k <= 0: break
            if nums[i] < 0:
                nums[i] = 0 - nums[i]
                k -= 1
            elif nums[i] == 0:
                k = 0
                break
            else:
                # 这里的 k & 1 是判断k是否为奇数的快速判断方法
                if nums[i] > nums[i - 1] and k & 1:  
                    nums[i - 1] = 0 - nums[i - 1]
                elif nums[i] <= nums[i - 1] and k & 1:
                    nums[i] = 0 - nums[i]
                k = 0
                break
        if k > 0 and k & 1:
            nums[-1] = 0 - nums[-1]
        return sum(nums)


if __name__ == '__main__':
    sol = Solution()
    # print(sol.largestSumAfterKNegations([2, -3, -1, 5, -4], 2))
    print(sol.largestSumAfterKNegations([-4, -2, -3], 4))

完整题目:

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

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


提示:

  • 1 <= nums.length <= 10^4
  • -100 <= nums[i] <= 100
  • 1 <= k <= 10^4
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Fnpj8K6xSCR   2024年05月17日   89   0   0 Python
  xKQN3Agd2ZMK   2024年05月17日   67   0   0 Python
  Ugrw6b9GgRUv   2024年05月17日   39   0   0 Python
  YpHJ7ITmccOD   2024年05月17日   37   0   0 Python
DosddciaWHNX