2022年11月26日 星期六

[45] Jump Game II

其實還是沒有很懂T_T 頭好昏
大概是說,有一個max 會存當前這個range裡面可以跳去最遠的地方
比方說 nums = [2,3,1,1,4] 從nums[0] 的2 開始, max jump 是0+2 =2 ; 
那麼right 設成2 . 接著要來看這兩步裡面, 分別可以跳到多遠?
所以nums[1] 的3 加上自己的index 1 =4 ; 這時max jump 已設成4 . 
但是right 還沒有到(right =2 ),我們還沒有看完這個range 的每一步.
下一個nums[2] index 2 加步數 1 =3 , 小於max jump. 所以maxjump 目前仍是四. 
此時right是2 , 已經到了, 表示前一輪的range 檢查完了, 這時可以跳去最遠的地方存在maxjump
right  就更新成maxjump (why?!XD)

for回圈裡面接下來要看nums[3] , index 3 可以是從index 1的3過來, 也可以是index 2的1 過來
因為他們都不會比max jump 大,所以就繼續看下一個index
到四的時候因為right =4了, 更新跳的次數, (和 maxjump , 不過因為已經是array 尾巴了,它再跳去哪在此時也沒有意義了. )
#define MAX(A,B) ((A>B)?(A):(B))

int jump(int* nums, int numsSize){
if (nums[0]==0 || numsSize==1)
return 0;
int right=0;
int maxjump=0;
int count=0;
for (int i=0;i<numsSize-1;i++)
{
maxjump= MAX(maxjump, nums[i]+i);
if (i==right)
{
count++;
right=maxjump;
}
}

return count;
}

沒有留言:

張貼留言