前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】T181-K 次取反后最大化的数组和

【leetcode刷题】T181-K 次取反后最大化的数组和

作者头像
木又AI帮
发布2019-10-14 11:00:53
4460
发布2019-10-14 11:00:53
举报
文章被收录于专栏:木又AI帮

【题目】

给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)

以这种方式修改数组后,返回数组可能的最大和。

代码语言:javascript
复制
示例 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]。

提示:

1 <= A.length <= 10000 1 <= K <= 10000 -100 <= A[i] <= 100

【思路】

显而易见,求数组和的最大值,当存在负数时,则最小的负数取相反数;当不存在负数时,则最小的正数取相反数。

【代码】

python版本

代码语言:javascript
复制
class Solution(object):
    def largestSumAfterKNegations(self, A, K):
        """
        :type A: List[int]
        :type K: int
        :rtype: int
        """
        A.sort()
        count_neg = len(filter(lambda x: x<0, A))
        # 更改前min(K, count_neg)个负数为相反数
        if count_neg >= K:
            A[:K] = list(map(lambda x: -x, A[:K]))
        else:
            A[:count_neg] = list(map(lambda x: -x, A[:count_neg]))
            # 全是正数,重新排序
            A.sort()
            if (K - count_neg) % 2 == 1:
                A[0] = -A[0]
        return sum(A)

C++版本

代码语言:javascript
复制
class Solution {
public:
    int largestSumAfterKNegations(vector<int>& A, int K) {
        sort(A.begin(), A.end());
        // 计算负数个数
        int count_neg = 0;
        for(int i=0; i<A.size(); i++){
            if(A[i] >= 0)
                break;
            count_neg++;
        }
        // 更改前min(K, count_neg)个负数为相反数
        if(count_neg >= K){
            for(int i=0; i<K; i++)
                A[i] = -A[i];
        }else{
            for(int i=0; i<count_neg; i++)
                A[i] = -A[i];
            // 重新排序
            sort(A.begin(), A.end());
            if((K - count_neg) % 2 == 1)
                A[0] = -A[0];
        }
        // 求和
        int res = 0;
        for(int i=0; i<A.size(); i++)
            res += A[i];
        return res;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档