难度:困难
该题目是LeetCode55.跳跃算法的进阶版,有以下几点需要注意:
有两种实现方式:
贪心算法和动态规划、代码如下:
// 寻找最大跨越点
int findMaxPoint(int* nums, int index){int i;for(i = 0; i < index; i++){if(nums[i]>= index-i)return i;}return i;
}
int jump(int* nums, int numsSize){int i, index, count;index = numsSize-1;count = 0;if(numsSize == 1) return 0;while(index != 0){index = findMaxPoint(nums, index);count++;}return count;
}
运行结果为:
代码如下:
int jump(int* nums, int numsSize){// ans为要跳跃的次数 int ans = 0;// end是目前为止,之前的元素能够到达的最大的点int end = 0;// maxPos是不断更新的最大值int maxPos = 0;for (int i = 0; i < numsSize - 1; i++){maxPos = nums[i]+i>maxPos?nums[i]+i:maxPos;// 当遍历的下标遇到end时,说明该跳跃一步了,ans加一if (i == end){end = maxPos;ans++;}}return ans;
}
运行结果为:
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态