NC148. 几步可以从头跳到尾
描述
示例1
输入:
2,[1,2]
输出:
1
说明:
从1号格子只需要跳跃一次就能到达2号格子示例2
输入:
3,[2,3,1]
输出:
1
说明:
从1号格子只需要跳一次就能直接抵达3号格子C++ 解法, 执行用时: 19ms, 内存消耗: 3256KB, 提交时间: 2021-07-24
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最少需要跳跃几次能跳到末尾 * @param n int整型 数组A的长度 * @param A int整型vector 数组A * @return int整型 */ int Jump(int n, vector<int>& A) { // write code here int maxdis = 0, cur = 0, res = 0; for (int i = 0; i < n - 1 && cur < n; i++) { maxdis = max(maxdis, i + A[i]); if (cur == i) { cur = maxdis; res++; } } return res; } };
C++ 解法, 执行用时: 20ms, 内存消耗: 3200KB, 提交时间: 2021-07-31
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最少需要跳跃几次能跳到末尾 * @param n int整型 数组A的长度 * @param A int整型vector 数组A * @return int整型 */ const int INF = 0x3F3F3F3F; int Jump(int n, vector<int>& A) { // write code here int res = 0; int reach = A.size() - 1; while(reach != 0){ for (int i = 0; i < reach; i++) { // 从左(i递增)至右查找到第一个(离终点最远, 贪就贪在这里)能跳至终点的落脚处 if (i + A[i] >= reach) { // 更新终点 reach = i; res++; } } } return res; } };
C++ 解法, 执行用时: 20ms, 内存消耗: 3808KB, 提交时间: 2021-08-02
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最少需要跳跃几次能跳到末尾 * @param n int整型 数组A的长度 * @param A int整型vector 数组A * @return int整型 */ int Jump(int n, vector<int>& A) { int reach = n - 1; int res = 0; while (reach) { for (int i = 0; i < reach; i++) { if (i + A[i] >= reach) { reach = i; res++; } } } return res; } };
C++ 解法, 执行用时: 21ms, 内存消耗: 3268KB, 提交时间: 2021-07-27
class Solution { public: int Jump(int n, vector<int>& A) { int step=0;//最大跳跃次数 int len=A.size(); int end=0,res=0;//分别表示结束位置已经跳跃次数 for(int i=0;i<len-1;i++) { step=max(step,i+A[i]); if(end>=n) break; if(end==i) { end = step; res++; } } return res; } };
C++ 解法, 执行用时: 21ms, 内存消耗: 3812KB, 提交时间: 2021-07-29
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最少需要跳跃几次能跳到末尾 * @param n int整型 数组A的长度 * @param A int整型vector 数组A * @return int整型 */ int Jump(int n, vector<int>& A) { // write code here int cnt = 0; int index = 0; int maxstep = 0; for(int i = 0; i < n; i++){ maxstep = max(maxstep, i + A[i]); if(index == i){ index = maxstep; cnt++; } if(index >= n - 1) break; } return cnt; } };