蛙跳--進軍硅谷

給出一維非負元素的數組,每一個元素表明從該元素位置能跳的最遠距離。假設初始位置在第一個元素,現根據輸入數組判斷是否能跳到數組的末尾。數組

書中解法:第一個指針掃描當前值,第二個指針記錄能跳的最遠距離Curmax=max(A[i]+i,Curmax)。若是Curmax>=A.length-1,return true;若是Curmax等於第一個指針位置而且第一個指針值爲0,則不能到末尾。ide

 1 bool canJump(int A[],int length)
 2 {
 3     if(length<=1)
 4         return true;
 5         int i,curMax=0;
 6         for(i=0;i<length-1;i++)
 7         {
 8                if(A[i]==0&&curMax<i+1)   return false;
 9                if(A[i]+i>curMax&&A[i]>0)
10                 {
11                         curMax=i+A[i];
12                         if(curMax>=length-1) return true;
13                 }
14         }
15         return false;
16 }
View Code

 

擴張問題:假設輸入數組能知足達到數組末尾的條件,求出最少跳數。spa

第一個指針記錄上一次的最遠到達距離,第二個指針記錄當前能到達的最遠距離。當遍歷數組的時候,若是當前位置超過了第一個指針位置,則跳數加1而且更新第一個指針的位置爲第二個指針的位置。若是當前位置加A[i]超過了第二個指針的位置,則更新第二個指針的值。指針

 1 int jump(int A[],int length)
 2 {
 3     int result=0;
 4     int last=0,curr=0;
 5     for(int i=0;i<length;++i)
 6     {
 7         if(i>last)
 8         {
 9             last = curr;
10             result++;
11         }
12         curr = max(curr,i+A[i]);
13     }
14     return result;
15 }
View Code
相關文章
相關標籤/搜索