1. 程式人生 > >演算法練習(18):Jump Game

演算法練習(18):Jump Game

題目:題意就是說從下標0的位置能否到達最後一個下標的位置,然後陣列的每個值代表當前位置能向前走的最大步數。

分析與思路:我用貪婪演算法來做的,我遍歷每一個下標的值同時更新最遠到達的下標值(far),最後若far>=A.length()-1則說明可以到達。

程式碼:

class Solution {
public:
	bool canJump(vector<int>& nums) {
		int far = 0;
		for (int i = 0; i < nums.size() && i <= far; i++) {
			if (i + nums[i] > far) far = i + nums[i];
		}//更新far
		return far >= nums.size() - 1;
	}
};

另一種思路:從左到右遍歷的時候把能到達的index都標true,最後檢視flag[size-1]是否為true即可。

程式碼:

class Solution {
public:
	bool canJump(vector<int>& nums) {
		vector<int> flag(nums.size(), false);
		flag[0] = true;
		for (int i = 0; i < nums.size() - 1; i++) {
			if (flag[i]) {
				if (nums[i] + i < nums.size()) {
					for (int j = i; j <= nums[i] + i; j++) {
						flag[j] = true;
					}
				}
				else return true;
			}
		}
		return flag[nums.size() - 1];
	}
};