1. 程式人生 > >LeetCode---45.跳躍遊戲II

LeetCode---45.跳躍遊戲II

題目來源:https://leetcode-cn.com/problems/jump-game-ii/description/

題目描述:

演算法描述:這題是上一個題的升級版,詳情請見https://blog.csdn.net/qq_39241239/article/details/82692390

這題也是一個典型的貪心演算法。每當走到一個位置index,就遍歷這個位置能到達的所有位置i(index+1~index+nums[index]),遍歷過程中找出這些位置能到達的最遠距離max,並記錄這個max對應的位置i。遍歷完之後,就可以從現在的位置index走到位置i。然後如此迴圈~~~

程式碼如下:

int jump(int* nums, int numsSize) {
    int step=0;//當前走的步數 
	int index=0;//當前位置 
	int p=0;//存放下一步的位置 
	while(index<numsSize){
		//現在的位置加上該位置可以走的步數>numsSize-2,說明再走一步就能到終點。 
		if(index+nums[index]>numsSize-2){
			return step+1;
		}
		int max=0; //存放下一步能到達的最遠位置
		//遍歷當前當前位置能到達的所有位置,找出下一步能到達的最遠距離 
		for(int i=index+1;i<=index+nums[index];i++){
			if(max<i+nums[i]){
				max=i+nums[i];
				p=i;
			}
		}
		step++;
		index=p; //走到下一步 
	} 
	return step;
}