45. 跳躍游戲 II - 力扣(LeetCode)
/**
? ? ? ? 維護變量:
? ? ? ? ? ? ? ? max_reachable,遍歷過的元素的最遠可達位置
? ? ? ? ? ? ? ? end,當前區間終點(隨max_reachable變化)
? ? ? ? 遍歷過程:
? ? ? ? ? ? ? ? 遍歷時迭代遍歷過的元素最遠可達位置,利用end記錄當前區間終點(隨max_reachable變化)
? ? ? ? ? ? ? ? 當移動至end即當前區間終點時,需要更新end為新的max_reachable即下一個區間終點,同時步數+1
? ? ? ? ? ? ? ? 直到end >= nums.length - 1,代表已經可以到達終點,可提前結束
? ? ? ? ? ? ? ? 即,在遍歷過程中將數組分為了不同的區間,當移動至end時當前區間結束,更新下一個區間終點為max_reachable,區間數即為最少需要的步數
? ? ? ? ? ? ? ? 區間代表每步最多移動的位置
*/
class Solution {/**維護變量:max_reachable,遍歷過的元素的最遠可達位置end,當前區間終點(隨max_reachable變化)遍歷過程:遍歷時迭代遍歷過的元素最遠可達位置,利用end記錄當前區間終點(隨max_reachable變化)當移動至end即當前區間終點時,需要更新end為新的max_reachable即下一個區間終點,同時步數+1直到end >= nums.length - 1,代表已經可以到達終點,可提前結束即,在遍歷過程中將數組分為了不同的區間,當移動至end時當前區間結束,更新下一個區間終點為max_reachable,區間數即為最少需要的步數區間代表每步最多移動的位置*/public int jump(int[] nums) {int maxReachable = 0;int end = 0;int jumps = 0;for(int i = 0; i < nums.length - 1; i++) {maxReachable = Math.max(maxReachable, i + nums[i]);if(i == end) {end = maxReachable;jumps++;}if(end >= nums.length - 1) {break;}}return jumps;}
}