建站快车产品介绍怎么推广淘宝店铺
[ 题目描述 ]:
[ 思路 ]:
- 题目要求在给出的每次可移动最大步数中选择一个移动步数,如果有一种选择能达到终点就返回true,如果没有一种选择能够达到终点就返回false
- 因为每次给出的最大步数不同,步数越大,也就使得探索空间变得更大,那么我们可以先缩小探索空间,再慢慢增加探索空间
- 例如 [2,3,1,1,4]
- 假设我们目前能探测只有nums[0],从nums[0]获取到两个步数,那么可以达到的距离变为index+2,即到nums[2],计算0~2中index+step的最大值也就是新的最大距离,然后在新的最大距离在中去寻找能够达到的最大距离;
- 如果能探索到的最大距离中没有能达到或超过数组长度-1的,即无法到达
- 如果能够达到或超过数组长度-1的,即能够到达
bool canJump(int* nums, int numsSize) {int index=0,len=0;while(index<=len&&index<numsSize){if(index+nums[index]>len){len=index+nums[index];}index++;}if(len>=numsSize-1) return true;return false;
}
[ 优化 ]:
- 时间复杂度为O(n),空间复杂度为O(1)
[ 官方题解 ]:
- 一、贪心,即上述算法