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

该博客介绍了如何在Python中解决一个算法问题,即在给定整数列表A和整数K的情况下,通过翻转K个负数变为正数或正数变为负数来最大化列表的和。博主展示了如何排序列表并根据K的奇偶性进行翻转,以找到最大的可能和。
摘要由CSDN通过智能技术生成

今日份的学习
真就简单题让我愉悦身心,中等+困难让我怀疑智商
在这里插入图片描述

class Solution:
    def largestSumAfterKNegations(self, A: List[int], K: int) -> int:
        #如果存在负数的的话,从最小的负数开始翻转
        #如果都是正数,多次翻转最小的数
        sortedA = sorted(A)
        for i in range(min(K,len(A))):
            if sortedA[i] < 0:  #如果当前是负数,就将其替换成正数
                sortedA[i] *= -1
            else:  #如果当前是正数,则说明停留在最小的正数,做转换
                #如果剩余的转换次数为偶数,则该数保持不变;
                #奇数的话,一定会有一个正数要变成相反数,且此时列表里全都是正数,则选择最小的正数替换
                if (K - i) % 2 != 0:  
                    if sortedA[i-1] < sortedA[i]:
                        sortedA[i-1] *= -1
                    else:
                        sortedA[i] *= -1
                break
        return sum(sortedA)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值