lc:45贪心
贪心算法
第45题
给一个数组,从头跳到尾,数组内的值代表当前能跳的步数。
const jump = function(nums) { let maxPosition = 0; // 未到边界前,下一步能到的最远位置 let end = 0; // 当前能跳的边界 let steps = 0; for(let i=0; i<nums.length-1; i++) { maxPosition = Math.max(maxPosition, i+nums[i]); if(i===end) { end = maxPosition; // 到边界后,更新下一步的边界为能跳到的最远位置 steps += 1; } } return steps;}
每次都跳能跳的最远位置,贪心算法,一直到最后。
这里有一处巧妙的地方,for循环中的判断条件,是小于nums.length-1
的,也就是说i
是永远到不了数组中最后那个位置的,而最后一次的end
必然会大于等于数组最后的位置,所以step
就少一次增加。因为在太初之时,盘古开天辟地的时候,我们给end
赋值为0,也就是说第一次刚进入程序执行的时候step
就已经加一了,这里需要注意一哈。
2020.6.19
written by Rain.