LeetCode---45.跳躍遊戲II
阿新 • • 發佈:2018-11-10
題目來源:https://leetcode-cn.com/problems/jump-game-ii/description/
題目描述:
演算法描述:這題是上一個題的升級版,詳情請見https://blog.csdn.net/qq_39241239/article/details/82692390。
這題也是一個典型的貪心演算法。每當走到一個位置index,就遍歷這個位置能到達的所有位置i(index+1~index+nums[index]),遍歷過程中找出這些位置能到達的最遠距離max,並記錄這個max對應的位置i。遍歷完之後,就可以從現在的位置index走到位置i。然後如此迴圈~~~
程式碼如下:
int jump(int* nums, int numsSize) { int step=0;//當前走的步數 int index=0;//當前位置 int p=0;//存放下一步的位置 while(index<numsSize){ //現在的位置加上該位置可以走的步數>numsSize-2,說明再走一步就能到終點。 if(index+nums[index]>numsSize-2){ return step+1; } int max=0; //存放下一步能到達的最遠位置 //遍歷當前當前位置能到達的所有位置,找出下一步能到達的最遠距離 for(int i=index+1;i<=index+nums[index];i++){ if(max<i+nums[i]){ max=i+nums[i]; p=i; } } step++; index=p; //走到下一步 } return step; }