每日一题---1005. K 次取反后最大化的数组和[力扣][Go]

简介: 每日一题---1005. K 次取反后最大化的数组和[力扣][Go]

题目描述

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。

重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

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

解题代码

// 我的贪心
func largestSumAfterKNegations(nums []int, k int) int {
  res := 0
  for i := 0; i < k; i++ {
    sort.Ints(nums)
    nums[0] = -nums[0]
  }
  for _, num := range nums {
    res += num
  }
  return res
}
// 大佬的贪心
func largestSumAfterKNegations(nums []int, K int) int {
  // 自定义排序将数组中按绝对值从大到小排序
  sort.Slice(nums, func(i, j int) bool {
    return math.Abs(float64(nums[i])) > math.Abs(float64(nums[j]))
  })
  // 将负数变为正数
  for i := 0; i < len(nums); i++ {
    if K > 0 && nums[i] < 0 {
      nums[i] = -nums[i]
      K--
    }
  }
  // 如果k有剩余将最后一位翻转
  if K%2 == 1 {
    nums[len(nums)-1] = -nums[len(nums)-1]
  }
  // 统计结果
  result := 0
  for i := 0; i < len(nums); i++ {
    result += nums[i]
  }
  return result
}

运行结果

我的结果

大佬的结果

我还是不够贪心啊


相关文章
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
3月前
|
存储 前端开发 Go
Go语言中的数组
在 Go 语言中,数组是一种固定长度的、相同类型元素的序列。数组声明时长度已确定,不可改变,支持多种初始化方式,如使用 `var` 关键字、短变量声明、省略号 `...` 推断长度等。数组内存布局连续,可通过索引高效访问。遍历数组常用 `for` 循环和 `range` 关键字。
|
30天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67
|
3月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
49 0
|
2月前
|
Java Go 数据处理
go语言使用切片而非数组
【10月更文挑战第18天】
16 1
|
3月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
27 4
|
3月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
26 0
Leetcode第三十三题(搜索旋转排序数组)
|
3月前
|
算法 C++
Leetcode第53题(最大子数组和)
这篇文章介绍了LeetCode第53题“最大子数组和”的动态规划解法,提供了详细的状态转移方程和C++代码实现,并讨论了其他算法如贪心、分治、改进动态规划和分块累计法。
79 0
|
3月前
|
C++
【LeetCode 12】349.两个数组的交集
【LeetCode 12】349.两个数组的交集
25 0
|
4月前
|
编译器 Go 索引
Go to Learn Go之数组
Go to Learn Go之数组
37 0