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 

  

  

 

posted on 2018-07-08 17:05  箬笠蓑衣  阅读(170)  评论(0编辑  收藏  举报