題目:
給定非負整數陣列,初始時在陣列起始位置放置一機器人,陣列的每個元素表示在當前位置機器人一步最大能夠跳躍的數目。它的目的是用最少的步數到達陣列末端。
例如:
給定陣列A=[2,3,1,1,2],最少跳步數目為2,對應的跳法是2->3->2,陣列位置變化為0->1->4。
[2,3,1,1,2,4,1,1,6,1,7],所需步數為5。
思路:
程式碼:
#include<iostream> using namespace std; int jump(int A[],int n){ if(n==1) return 0; int step=0; int i=0,j=0; int k,j2; while(j<n){ step++; j2=j; for(k=i;k<=j;k++){ j2=max(j2,k+A[k]); if(j2>=n-1) return step; } i=j+1; j=j2; if(j<i) return -1; } return step; } int main(){ int A[]={2,3,1,1,2,4,1,1,6,1,7}; int n=sizeof(A)/sizeof(A[0]); cout << jump(A,n) <<endl; return 0; }