Leetcode 55 Jump Game(第七周作业)

上周学习了贪心算法,于是去百度了一下比较有名的leetcode的贪心算法的题目,发现这道题目还是挺经典的。

首先贴出原题

意思就是给出一个数组,每个元素的值代表可以从这个位置走出去的最大距离。问这个数组能不能走到最后一个元素的位置。

所以我想利用贪心算法来做,大概思路是:遍历一遍整个数组,设一个变量为max,意思是当前遍历可以走到最远的距离,倘若在这个max范围内,有一个元素可以从自身出发走到最后一个元素,那么就返回true。

贴出代码:

#include<vector>
#include<iostream>
using namespace std;
class Solution {
public:
	bool canJump(vector<int>& nums) {
		int max = 0;
		if (nums.size() == 1)
			return true;
		for (int i = 0; i <nums.size() - 1; i++) {
			//一定要在可以走的范围内,即小于等于max
			if (i <= max) {
				if (i + nums[i] >= (nums.size() - 1))
					return true;
				else{
					//如果从当前元素能走的最大元素大于max,那么max更新
					if (i + nums[i] > max)
						max = i + nums[i];
				}
			}
		}
		return false;
	}
};

可以看出时间复杂度为:O(n),只遍历了整个数组一遍。
空间复杂度为:O(1):即只声明了一个max变量,以及一个用于循环的变量i。

可以看出打败的人还是比较可观的


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值