zoukankan      html  css  js  c++  java
  • LeetCode(一) jump game

    一、

    1、

    #include<iostream>
    #include<cmath> 
    using namespace std;
    
    bool CanJump(int n[],int num)
    {
    	if (num==1)
          return 1; //如果向量长度为 1,则 
    	int loc; 
    	int gla=0;
    	for(int i=0;i<num-1;i++)
    	{
    		if(gla<i){  //进入不到下一步 
    			break;
    		} 
    		loc=i+n[i]; //局部变量,每一个位置能达到的最远位置 
    		gla=max(gla,loc);  //全局变量,达到的最大位置 ,一定要注意判断,两者融合的过程 
    	}
    	if(gla>=num-1)
    	{
    		return 1;
    	}
    	else{
    		return 0;
    	}
    }
     
    int main()
    {
    	int a[]={2,3,1,1,4};
        if(CanJump(a,5)==1)
        {
        	cout<<"True";
        }
        else{
        	cout<<"False";
        }
        return 0;
    }
    

    2、

    当{3,2,1,0,4}时,如下结果

    二、

     1、在上面的基础上改

    #include<iostream>
    #include<cmath> 
    using namespace std;
    
    int CanJumpNum(int n[],int num)
    {
    	if (num==1)
          return 0; //如果向量长度为 1,则留在原地 
    	int loc; 
    	int gla=0;
    	int step=0; 
    	for(int i=0;i<num-1;i++)
    	{
    		if(gla<i){  //进入不到下一步 
    			break;
    		} 
    		loc=i+n[i]; //局部变量,每一个位置能达到的最远位置 
    		
    		if(loc>gla){
    			step++;
    		} 
     
    		gla=max(gla,loc);  //全局变量,达到的最大位置 ,一定要注意判断,两者融合的过程 
    		
    		if(gla>=num-1)  //结束的标志 
    		{
    			break;
    		}
    	}
    	if(gla>=num-1)
    	{
    		return step;
    	}
    	else{
    		return -1;
    	}
    }
     
    int main()
    {
    	int a[]={7,0,9,6,9,6,1,7,9,0,1,2,9,0,3};
        cout<<CanJumpNum(a,15);
        return 0;
    }//2,3,1,1,4 
    

    出现这种情况,这是因为,两步过程是7—7—3;

    而程序中的4步是。这是因为我们到7后又重头考虑,没有在7上继续加。所以这个思路是有漏洞的。

    2、

    #include<iostream>
    #include<cmath> 
    using namespace std;
    
    int CanJumpNum(int A[],int n)
    {
    	int curReach=0,maxReach = 0,steps=0;
        for(int i=0;i<n && i<=maxReach;i++)
        {
            if(i>curReach)    //steps-1步能够到达的距离,必须再走一步了
            {
                ++steps;
                curReach = maxReach;
            }
            maxReach = max(maxReach,i+A[i]); // step步最远距离
        }
        if(maxReach<n-1)
            return -1;
        else
            return steps;
    }
     
    int main()
    {
    	int a[]={7,0,9,6,9,6,1,7,9,0,1,2,9,0,3};
        cout<<CanJumpNum(a,15);
        return 0;
    }//2,3,1,1,4 
    

      

      

  • 相关阅读:
    静态导入
    OC中的Debug表达式
    友盟消息推送(一)
    Xcode7.0 更新完后,网络请求报错
    HTTP返回的状态码
    ios 通知监听App进入后台,然后再进入App(获取验证码的时间间隔)
    iOS保存model数据(自定义Model 可以存放到本地)
    tatableView 刷新
    iOS bounds和Frame的区别
    UIButton下面添加滑动的线
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/9280566.html
Copyright © 2011-2022 走看看