LeetCode 55 Jump Game

来源:互联网 发布:剑三丐姐成女捏脸数据 编辑:程序博客网 时间:2024/06/05 07:02

55. Jump Game.

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.

Determine if you are able to reach the last index.

For example:

A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.


题意:给定一个数组,表示n个点,每个数组元素表示在该点能够跳跃的最大距离,判断从第一个点出发是否能够到达数组的最后一个点。


分析:从原点出发,根据数组的元素,判断是否能够到达最后一个点,这显然是一个贪心问题,特别需要注意的是:数组中的每个元素表示的能够跳跃的最大距离,在贪心算法过程中,每次跳跃不一定都需要跳跃最大距离,根据后续数组元素选择跳跃距离。(踩坑:第一次实现时根据每次都跳跃最大距离来判断,掉进坑了)


这个问题也是个类似动态规划的问题,在实现过程中,采用了一个标记数组jumped[i],初始化为false,并且用jumped[0]=true表示从第一个点出发,根据数组中元素nums[i],将能够跳跃到的地方标记为true,从前向后遍历数组中已经可以到达的元素,当能够到达的地方超过了最后一个点时,返回true,否则,遍历完整个数组后,返回false;


具体代码实现如下:

class Solution {public:bool canJump(vector<int>& nums) {bool* jumped = new bool[nums.size() + 1];for (int i = 0; i < nums.size(); i++) {jumped[i] = false;}jumped[0] = true;for (int i = 0; i < nums.size(); i++) {if (jumped[i]) {if (i + nums[i] >= nums.size() - 1)return true;else { // 每次不一定要跳最大距离for (int j = i + 1; j <= i + nums[i]; j++)jumped[j] = true;}}}return false;}};


分析:很明显,这种方法虽然能够被Accepted,但是这个算法的时间复杂度比O(n)要略差一些,因为在第一层循环内还有一个标记能够到达位置的循环,严格来说,这种算法也不太可取。



既然每次跳跃都一个最大距离,那么意味着每次跳跃都可以到达最大距离之前的所有位置,就可以把每个位置的标记数组简化为最远位置的标记,标记为canArrive,用于记录能够到达的最远位置。遍历数组时,也即是遍历能够到达的位置时,不断更新canArrive的位置,而在判断的时候,只需要判断canArrive是否达到了最后一个点,就可完成整个算法。


这个优化算法具体代码实现:

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


分析:易知,优化过的算法时间复杂度即为O(n),结果也证明这算法完成所需要的时间比之前的算法快了不止百倍。





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝买东西提前确认收货了怎么办 苹果手机王者荣耀充值充多了怎么办 买家淘宝账号出现虚拟交易怎么办 贵州通登录不上怎么办 华为手机媒体声音小怎么办 苹果七内存满了怎么办 华为p9玩王者卡怎么办 鞋放健身房丢了怎么办 京东商家搞虚假活动怎么办 淘宝买的商品出现质量问题怎么办 买了重复的东西怎么办 借记卡在atm用不了怎么办 淘宝评论视频审核不通过怎么办 京东票据丢了怎么办 开拼多多找不到低价货源怎么办 要是校花追你该怎么办 苏宁自提逾期怎么办 天猫超市有问题怎么办 买的东西质量有问题怎么办 淘宝优惠额度大做不了怎么办 淘宝天猫拒绝退货退款怎么办 u盘变成活动分区怎么办 学生上课纪律差家长老师怎么办 老师管纪律学生打老师怎么办? 淘宝店铺层级排名下降怎么办 网购不支持该地区销售怎么办 分销公司佣金不给业务员怎么办 淘宝买家账号违规了怎么办 王者荣耀打野被队友抢野怎么办 艾肯材料换错了怎么办 淘宝直播粉丝5万怎么办 淘宝直播刚开始好难怎么办 分期乐账号忘记了怎么办 外链多了影响网站排名怎么办 自粘墙纸有气泡怎么办 贴壁纸阴角不力怎么办 自贴墙纸有气泡怎么办 壁纸贴的有起泡怎么办 pos机连接主机失败怎么办 无线pos机连接主机失败怎么办 水墨晕染模板用不了怎么办