算法训练第24天|122.买卖股票的最佳时机II|55. 跳跃游戏|45.跳跃游戏II|1005.K次取反后最大化的数组和
LeetCode 122.买卖股票的最佳时机II
题目链接:122.买卖股票的最佳时机II
题目讲解:代码随想录
func maxProfit(prices []int) int {
var sum int
for i := 1; i < len(prices); i++{
if prices[i] - prices[i - 1] > 0{
sum += prices[i] - prices[i - 1]
}
}
return sum
}
LeetCode 55. 跳跃游戏
题目链接:55. 跳跃游戏
题目讲解:代码随想录
func canJump(nums []int) bool {
cover := 0
n := len(nums) - 1
for i := 0; i <= cover; i++{
cover = max(i + nums[i], cover)
if cover >= n{
return true
}
}
return false
}
func max(a, b int) int{
if a > b{
return a
}
return b
}
LeetCode 45.跳跃游戏II
题目链接:45.跳跃游戏II
题目讲解:代码随想录
func jump(nums []int) int {
n := len(nums)
if n == 1{
return 0
}
cur, next := 0, 0
step := 0
for i := 0; i < n; i++{
next = max(nums[i] + i, next) // 记录下一跳的覆盖范围
if i == cur { // 如果遍历到 当前覆盖范围最后的位置
if cur != n - 1{ // 并且当前覆盖范围 并没有全覆盖
step++ // 说明需要再增加一跳
cur = next // 更新当前的覆盖范围
if cur >= n - 1{ // 当前的覆盖范围 已经 全覆盖了
return step
}
}else{
return step // 当前已经全覆盖了
}
}
}
return step
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
LeetCoder 1005.K次取反后最大化的数组和
题目链接:1005.K次取反后最大化的数组和
题目讲解:代码随想录
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--
}
}
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
}