题目链接:
https://leetcode.cn/problems/jump-game-ii/
以下是使用Go语言实现外观数列问题的代码:
func jump(nums []int) int {
maxpos := 0 // 最远可到达距离
last := 0 // 上一次起跳位置
step := 0 // 步数
for i := 0; i < len(nums)-1; i { // 注意循环条件,最后一个位置不需要遍历
maxpos = max(maxpos, i nums[i]) // 更新最远可到达距离
if i == last { // 当前位置已经到达上一次起跳位置,需要起跳一次
last = maxpos // 更新起跳位置为最远可到达距离
step // 步数加1
}
}
return step
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
执行用时:8 ms, 在所有 Go 提交中击败了96.46%的用户
内存消耗:5.8 MB, 在所有 Go 提交中击败了37.56%的用户
通过测试用例:109 / 109
题解:
这是一道经典的贪心算法题目,我们首先可以考虑贪心算法的思路来解决这个问题。我们假设当前可以到达的最远距离为maxpos,当前的步数为step,最后一次起跳的位置为last,则根据题意我们可以得出以下贪心策略:
时间复杂度分析
在上述代码中,我们只需要一次遍历整个数组,因此时间复杂度为 O(n)。
空间复杂度分析
在上述代码中,只需要使用常数个变量,因此空间复杂度为 O(1)。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved