func maxProfit(prices []int) int {
res := 0
for i := 1; i < len(prices); i++ { //注意i从1开始遍历
if prices[i]-prices[i-1] > 0 { //累加每次大于0的交易
res += prices[i]-prices[i-1]
}
}
return res
}
func canJump(nums []int) bool {
if len(nums) == 1 { //只有一个元素则一定为真
return true
}
cover := 0 //初始化覆盖范围,值为元素的下标
for i := 0; i <= cover; i++ { //注意i的取值不能超过覆盖范围
if i+nums[i] > cover { //更新覆盖范围,取最大的覆盖范围
cover = i + nums[i]
}
if cover >= len(nums)-1 { //覆盖范围到最后一个元素或者超出数组长度
return true
}
}
return false
}
func jump(nums []int) int {
// 数组长度是1的情况
if len(nums) == 1 {
return 0
}
cur := 0 //当前覆盖范围
next := 0 //下一步覆盖范围
res := 0
for i := 0; i < len(nums); i++ {
next = max(i+nums[i], next)
if i == cur { //走到当前覆盖范围的终点且不是数组的最后一个元素
if cur != len(nums)-1 {
res++
cur = next
if cur >= len(nums)-1 { //判断新的覆盖范围是否超过数组范围
break
}
} else {
break
}
}
}
return res
}