LeetCode: Jump Game II

本文提供了一种解决跳远问题的有效算法实现方案。通过不断更新可达最远距离和跳跃次数,该算法能在O(n)的时间复杂度内找到从起始位置到达目标所需的最少跳跃次数。代码示例使用C++及C#实现。

第一次给每个值都算最远距离,结果large没过,第二次用了现在的方法稍微改了改,最后过了,少数次过吧

 1 class Solution {
 2 public:
 3     int jump(int A[], int n) {
 4         // Start typing your C/C++ solution below
 5         // DO NOT write int main() function
 6         int left, right, index;
 7         left = right = index = 0;
 8         while (right < n-1) {
 9             index++;
10             int rmax = left+A[left];
11             for (int i = left+1; i <= right; i++) {
12                 rmax = max(rmax, i+A[i]);
13             }
14             left = right;
15             right = rmax;
16         }
17         return index;
18     }
19 };

 C#

 1 public class Solution {
 2     public int Jump(int[] nums) {
 3         int left = 0, right = 0, index = 0;
 4         while (right < nums.Length-1) {
 5             index++;
 6             int rmax = left + nums[left];
 7             for (int i = left + 1; i <= right; i++) rmax = Math.Max(rmax, i + nums[i]);
 8             left = right;
 9             right = rmax;
10         }
11         return index;
12     }
13 }
View Code

 

转载于:https://www.cnblogs.com/yingzhongwen/archive/2013/04/01/2994035.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值