博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode - 45. Jump Game II
阅读量:5875 次
发布时间:2019-06-19

本文共 1863 字,大约阅读时间需要 6 分钟。

45. Jump Game II 

 ----------------------------------------------------------------------------

Mean: 

给定一个数组a,玩家的初始位置在idx=0,玩家需要到达的位置是idx=a.size()-1.

如果玩家在idx处,那么他最多可以向后走a[idx]步,问最少多少步可以走到终点.

analyse:

方法非常巧妙,类似于BFS.

Time complexity: O(N)

 

view code

/**
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights steperved.
* -----------------------------------------------------------------
*       Author: crazyacking
*       Date  : 2016-03-08-14.52
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using
namespace
std;
typedef
long
long(
LL);
typedef
unsigned
long
long(
ULL);
const
double
eps(
1e-8);
class
Solution
{
public
:
   
int
jump(
vector
<
int
>&
nums)
   
{
       
int
i(
0
),
j(
1
),
steps(
0
), N(
nums
.
size());
       
while(
j
< N)
       
{
           
int
endj
=
min(
nums
[
i
]
+
i
, N);
           
while(
j
<
=
endj)
           
{
               
if(
nums
[
j
]
+
j
>
nums
[
i
]
+
i)
                   
i
=
j;
               
j
++;
           
}
           
steps
++;
       
}
       
return
steps;
   
}
};
// this is my TLE code :(
//class Solution
//{
//public:
//    int jump(vector<int>& nums)
//    {
//        queue<pair<int,int>> que; // pos,step
//        int res=INT_MAX;
//        que.push(make_pair(0,0));
//        while(!que.empty())
//        {
//            pair<int,int> top=que.front();
//            que.pop();
//            if(top.first>=nums.size()-1)
//                res=min(res,top.second);
//            for(int i=1;i<=nums[top.first] && i+top.first<=nums.size();++i)
//            {
//                que.push(make_pair(top.first+i,top.second+1));
//            }
//        }
//        return res;
//    }
//};
int
main()
{
   
int n;
   
while(
cin
>>n)
   
{
       
vector
<
int
>
ve;
       
for(
int
i
=
0;
i
<n;
++
i)
       
{
           
int
tempVal;
           
cin
>>
tempVal;
           
ve
.
push_back(
tempVal);
       
}
       
Solution
solution;
       
int
ans
=
solution
.
jump(
ve);
       
cout
<<
ans
<<
endl;
   
}
   
return
0;
}
/*
*/

转载于:https://www.cnblogs.com/crazyacking/p/5254917.html

你可能感兴趣的文章
[LeetCode] 824. Goat Latin
查看>>
微服务简介
查看>>
springboot+vue 项目持续部署
查看>>
阿里云发布黑科技:面对海量的文本翻译任务,阿里翻译团队是如何解决的
查看>>
JavaScript中的面向对象个人分享
查看>>
Spring-Cloud-Config快速开始
查看>>
【刷算法】二叉搜索树的第k个结点
查看>>
jquery里面val函数重载的实现思路
查看>>
VSCode格式化代码功能失效的bug解决方法
查看>>
蚂蚁金服宣布新一轮融资140亿美元
查看>>
补习前端(css+html)基础-1:
查看>>
Python学习之路1-变量和简单数据类型
查看>>
lodash.js源码-dropWhile
查看>>
优化:mysql查询最近一条记录未指定标题的文章
查看>>
如何降低前端开发的复杂度
查看>>
RxJS 6有哪些新变化?
查看>>
Python快速学习系列一
查看>>
Vue Vuex vue-route学习项目
查看>>
requestDisallowInterceptTouchEvent调用时机分析
查看>>
Python: Windows下用multiprocessing的深坑
查看>>