LeetCode55---跳跃游戏

题目描述

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例1:

输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

示例2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

解题思路:
使用贪心思想实现
首先求出每个下标可能到达的位置的最大值数组,即index
然后循环index数组,如果跳跃的步数大于最大可以跳跃的位置,则退出
如果当前的可以跳跃的位置大于最大可以跳跃的位置,则更新最大可以跳跃的位置。
最后判断可以跳远的步数jump是否等于index数组的长度,等于就返回true

bool canJump(vector<int>& nums) {
	//[0,1,2,3,4]
	//[2,3,1,1,4]
	//[2,4,3,4,8]
	if (nums.size() < 2) {
		return true;
	}
	vector<int> index;//能跳到最远的位置下标
	for (int i = 0; i < nums.size(); i++) {
		index.push_back(i + nums[i]);
	}
	int jump = 0;//能跳多少步
	int max_index = index[0];//最远能跳多远
	while (jump < index.size() && jump <= max_index) {
		if (max_index < index[jump]) {
			max_index = index[jump];
		}
		jump++;
	}
	if (jump == index.size()) {
		return true;
	}
	return false;
}
上一篇:CTF-PWN-house-of-orange (unsortedbin attack+IO_FILE文件结构利用)


下一篇:第十六章:开发工具-pdb:交互式调试工具-改变执行流-前跳