结果马马虎虎,内存消耗效果还行
首先看一下题目描述
首先上一下代码
class Solution {
public:
int jump(vector<int>& nums) {
int min_num=0, len=nums.size(),index=0,sum=0,newind=0;
if(len<=2) return len-1;
while(index<len-1){
sum=0;
for(int i=1;i<=nums[index];i++){
if((index+i)==len-1){
return min_num+1;
}else{
if(nums[index+i]+i>=sum){
sum=nums[index+i]+i;
newind=i;
}
}
}
index+=newind;
min_num++;
}
return min_num;
}
};
算法核心原理如下:
当给定的数组长度小于等于2时候,最小跳跃次数就是长度-1;
大于二的时候,维护一个遍历下标index, 从0遍历到数组末尾。根据遍历到的数组的值(记它为for循环的代码执行次数,每一次向后蔓延,寻找遍历到的值与下标i和的最大值,相同取下标大的那个。然后每一次执行求最大值时候,要判断是否到达数组终点,如果到了直接返回最大次数+1;否则,index自增i,直到遍历结束。