zoukankan      html  css  js  c++  java
  • 刷题55. Jump Game

    一、题目说明

    题目55. Jump Game,给定一组非负数,从第1个元素起,nums[i]表示你当前可以跳跃的最大值,计算能否到达最后一个index。难度是Medium。

    二、我的解答

    非常惭愧,这个题目我做完,提交n次,除了几次边界错,其他就是Time Limit Exceeded,而且优化也无果。

    我的代码:

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

    经过分析,上述代码是采用dp解答的,问题出在“从左到右”计算。如果“从右到左”,用不用dp都很容易解决:

    class Solution{
    public:
        bool canJump(vector<int>& nums) {
        	//数组长度为1可以到达,如果nums[0]为0不可到达 
    		if(nums.size()<=1)
    		    return true;
    		else if(nums[0] == 0)
    		    return false;
    		for(int i=nums.size()-2;i>0;i--){
    			//找到0,从前1个开始,判断能否跳过去 
    			if(nums[i]==0){
    				int j=i-1;
    				while(j>=0){
    					if(nums[j]>(i-j)){
    						i = j;
    						break;
    					}else if(j==0) 
    						return false;
    					j--;
    				}
    			}
    		}
    		return true;
        }
    };
    

    性能:

    Runtime: 16 ms, faster than 29.20% of C++ online submissions for Jump Game.
    Memory Usage: 9.9 MB, less than 80.26% of C++ online submissions for Jump Game.
    

    三、优化措施

    看了大神的解答,十年苦读白费了。4行代码,可读性好,绝妙之极!

    class Solution{
    public:
    	//dp算法,从最后一个开始,last指示最后要能跳到的位置
        bool canJump(vector<int>& nums) {
        	int last = nums.size() - 1;
            for(int i = nums.size() - 2; i >= 0; i--) 
                if(last - i <= nums[i]) last = i;
            return last == 0;
        }
    };
    

    性能还不错:

    Runtime: 12 ms, faster than 74.46% of C++ online submissions for Jump Game.
    Memory Usage: 9.9 MB, less than 86.84% of C++ online submissions for Jump Game.
    
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    android 显示自定义视图对话框
    android为按钮事件进行监听过程
    实验三
    实验二
    实验一
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/siweihz/p/12247621.html
Copyright © 2011-2022 走看看