leetcode:45. 跳跃游戏 II(贪心)

题目:

在这里插入图片描述

分析:

优化的方法:当从j跳到i,A【i】<A【j】-(j-i) 则不用再跳了。
不对,可能i位置的值比j位置的要小。
是对的,因为能跳到之后的,那它前面的也一定可以跳到的。

老老实实逐个跳吧。

代码1:暴力无优化

会有一个样例不通过。

long long  A[nums.size()];
 for(int i=0;i<nums.size();i++) A[i]=1<<30;
 A[0]=0;
 for(int i=0;i<nums.size()-1;i++)
 for(int j=1;j<=nums[i];j++)
 {
        if(i+j<nums.size())
  A[i+j]=min(A[i+j],A[i]+1);
        else continue;
 }
 return A[nums.size()-1];

代码2:自己想的根据第i跳可以达到的最远的距离

根据第一跳算的可以跳到(2,x),则根据(2,x)计算第二跳可以到达的最远距离(x+1,y),再根据(x+1,y)计算第三跳可以到达的最远距离(y+1,z)。。。。。直到(I,j) : 目的点在其中。

不错,看来自己潜力无限,哈哈哈

 int start=0,end=0; 
 int step=0;
 while(1)
 {
  int maxx=-1;
  for(int i=start;i<=end;i++)
  {
   maxx=max(maxx,nums[i]+i);
  }
  step++;
  start=end+1;
  end=maxx;
  if(nums.size()-1<=end && nums.size()-1>=start) return step;
 }
发布了48 篇原创文章 · 获赞 20 · 访问量 608

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/104029155
今日推荐