1. 程式人生 > >經典演算法——Jump Game(II)

經典演算法——Jump Game(II)

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Your goal is to reach the last index in the minimum number of jumps.

For example:
Given array A = [2,3,1,1,4]

The minimum number of jumps to reach the last index is 2

. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)


#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

class Solution {
public:
	int jump(vector<int> A)
	{
		int maxReach = A[0];
		int edge = 0; //edge表示當前可以達到最遠的座標邊界值
		int minstep = 0;

		for (int i = 1; i < A.size(); i++)
		{
			//若當前座標超過了最遠的座標邊界值,應該跳躍一次,同時更新maxReach
			if (i > edge)
			{  
				minstep += 1;
				edge = maxReach;
				if (edge >= A.size() - 1) //若陣列最後一個元素的座標在edge覆蓋的範圍,則返回跳躍次數
					return minstep;
			}
			maxReach = max(maxReach, A[i] + i);
		}
		//如果不能達到陣列最後一個元素,則返回0
		return 0;
	}
};


int main()
{
	Solution sol;
	vector<int> nums = {  5,9,3,2,1,0,2,3,3,1,0,0 };
	int res =sol.jump(nums);
	cout << res << endl;
	system("pause");
	return 0;
}