leetcode_1005

淳属虚构 · · 450 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang:

思路:这题还是贪心解法,如果一个数组中有负数,先翻转负数,如果负数的数目大于等于k,那么把所有最小的负数翻转完即可。如果不是,那么我们就要对此时全部是正数的数组进行翻转,那么翻转的是当前数组中最小的元素。

代码如下:

func largestSumAfterKNegations(A []int, K int) int {
    sort.Ints(A)
    temp,k:=0,K
    if A[0]<0{//代表有负数,那么先翻转负数部分
        i:=0
        for ;i<K;i++{
            if A[i]<0{
                A[i]=-A[i]
            }else{//如果所有负数都被翻转完了,而K还有剩余,那么停下
                if A[i]<A[i-1]{//此时我们需要知道当前数组的最小值
                    temp=i
                }else{
                    temp=i-1
                }
                break
            }
        }
        k=K-i//还需要翻转多少次
    }
    if k%2!=0{//到达这一步的时候,要么数组里没有负数,但k还大于等于0;要么数组里还有负数,但K已经被用完了
        A[temp]=-A[temp]
    }
    res:=0
    for _,v:=range A{
        res+=v
    }
    return res
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:淳属虚构

查看原文:leetcode_1005

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

450 次点击  
加入收藏 微博
上一篇:面试题
下一篇:leetcode_921
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传