A frog is crossing a river. The river is divided into x units and at each unit there may or may not exist a stone. The frog can jump on a stone, but it must not jump into the water.

Given a list of stones' positions (in units) in sorted ascending order, determine if the frog is able to cross the river by landing on the last stone. Initially, the frog is on the first stone and assume the first jump must be 1 unit.

If the frog's last jump was k units, then its next jump must be either k - 1, k, or k + 1 units. Note that the frog can only jump in the forward direction.

Note:

  • The number of stones is ≥ 2 and is < 1,100.
  • Each stone's position will be a non-negative integer < 231.
  • The first stone's position is always 0.
[0,1,3,5,6,8,12,17]

There are a total of 8 stones.
The first stone at the 0th unit, second stone at the 1st unit,
third stone at the 3rd unit, and so on...
The last stone at the 17th unit. Return true. The frog can jump to the last stone by jumping
1 unit to the 2nd stone, then 2 units to the 3rd stone, then
2 units to the 4th stone, then 3 units to the 6th stone,
4 units to the 7th stone, and 5 units to the 8th stone.

题意:

一只不会游泳的青蛙,从位置0th unit(即我画的图中的第0号石头)出发开始跳,

若前一次它跳了K units,

这次就只能跳 K-1 或者 K 或者 K+1 units,

问青蛙是否能跳到对岸。

思路:

以[0,1,3,5,6,8,12,17]为例自己画了个图,我把units理解为直尺上的刻度,更直观理解题意。

用HashMap套一个set,set内存放last jump的units

首先,遍历一遍给定数组stones = {0,1,3,5,6,8,12,17}, 存入所有给定刻度,初始化HashMap。

Integer(当前刻度)        0    1    3    5   6   8   12   17

Set(last jump units)    []  []    []    []  []   []    []    [] 

然后,初始化0刻度对应的Set为[0]。

Integer(当前刻度)         0    1    3    5   6   8   12   17

Set(last jump units)    [0]  []    []    []  []   []    []    [] 

最后,遍历一遍给定数组stones = {0,1,3,5,6,8,12,17}

根据题意,青蛙的下一跳(nextJump)范围取决于上一跳(lastJump)

遍历Set里上一跳的取值

Integer(当前刻度)         0    1   3   5   6   8   12   17

Set(last jump units)    [0]  []   []   []  []   []    []    [] 

lastJump                 0

nextJump                 -1

                         0

                         1  

查找map.containsKey(下一跳的刻度),即 (当前刻度 + nextJump Range)

Integer(当前刻度)         0    1    3    5      6        8        12          17

Set(last jump units)    [0]   [1]    [2]     [2]      [3,1]         [3,2]          [4]                [5] 

lastJump                 0      1       2       2        3   1          3   2           4                    5

nestJump Range:

(1)lastJump-1           -1      0        1       1        2     0        2      1        3        

(2)lastJump              0      1        2       2        3     1        3      2        4       

(3)lastJump+1            1      2        3       3        4     2        4      3        5       

map.containsKey         0-1✗    1+0✗     3+1✗    5+1✓   6+2✓  6+0✗      8+2✗  8+1✗      12+3✗

                        0+0✗    1+1✗     3+2✓    5+2✗   6+3✗  6+1✗      8+3✗  8+2✗      12+4✗

                        0+1✓    1+2✓    3+3✓    5+3✓   6+4✗  6+2✓      8+4✓ 8+3✗       12+5✓

代码:

  public boolean canCross(int[] stones) {
if (stones.length == 0) return false;
HashMap<Integer, HashSet<Integer>> map = new HashMap<>();
for (int i = 0; i < stones.length; i++) {
map.put(stones[i], new HashSet<>());
} map.get(0).add(0);
for (int i = 0; i < stones.length; i++) {
for (int lastJump : map.get(stones[i])) {
for (int nextJump = lastJump - 1; nextJump <= lastJump + 1; nextJump++) {
if (nextJump > 0 && map.containsKey(stones[i] + nextJump)) {
map.get(stones[i] + nextJump).add(nextJump);
}
}
}
}
return !map.get(stones[stones.length - 1]).isEmpty();
}

[leetcode]403. Frog Jump青蛙过河的更多相关文章

  1. [LeetCode] 403. Frog Jump 青蛙跳

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

  2. 403 Frog Jump 青蛙过河

    一只青蛙想要过河. 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有). 青蛙可以跳上石头,但是不可以跳入水中.给定石子的位置列表(用单元格序号升序表示), 请判定 ...

  3. [LeetCode] Frog Jump 青蛙过河

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

  4. [leetcode] 403. Frog Jump

    https://leetcode.com/contest/5/problems/frog-jump/ 这个题目,还是有套路的,之前做过一道题,好像是贪心性质,就是每次可以跳多远,最后问能不能跳到最右边 ...

  5. 第十七周 Leetcode 403. Frog Jump(HARD) 线性dp

    leetcode403 我们维护青蛙从某个石头上可以跳那些长度的距离即可 用平衡树维护. 总的复杂度O(n^2logn) class Solution { public: bool canCross( ...

  6. 【JavaScript】Leetcode每日一题-青蛙过河

    [JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...

  7. 【leetcode】403. Frog Jump

    题目如下: 解题思路:我的做法是建立一个字典dic,key为stone,value是一个set,里面存的是从前面的所有stone跳跃到当前stone的unit集合.例如stones=[0,1,2,3] ...

  8. 403. Frog Jump

    做完了终于可以吃饭了,万岁~ 假设从stone[i]无法跳到stone[i+1]: 可能是,他们之间的距离超过了stone[i]所能跳的最远距离,0 1 3 7, 从3怎么都调不到7: 也可能是,他们 ...

  9. Java实现 LeetCode 403 青蛙过河

    403. 青蛙过河 一只青蛙想要过河. 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有). 青蛙可以跳上石头,但是不可以跳入水中. 给定石子的位置列表(用单元格序 ...

随机推荐

  1. (转)USB中CDC-ECM的了解和配置

    USB中典型类及子类: 类别 解释 子类 典型应用 IC芯片 备注 UVC 视频类 免驱USB摄像头 CDC 通讯类 RNDIS ECM(p24) 免驱USB网卡 RTL8152B EEM ..... ...

  2. oracle 用函数返回对象集合

    1.先要声明全局type:并且,字段变量类型要为object,不能为record: (1)CREATE OR REPLACE TYPE "DDD_BY_DEPT_STATISTISC&quo ...

  3. javascript中setInterval制作跑马灯的效果

    html代码: javascript代码 <script type="text/javascript"> function scroll() { var title = ...

  4. 运用map并于执行期指定排序准则

    该例展示以下技巧: 如何使用map 如何撰写和使用仿函数 如何在执行期定义排序规则 如何在"不在乎大小写"的情况下比较字符串 #include<iostream> #i ...

  5. 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)

    手机端插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' ...

  6. time,sys,os 模块

    import time# 时间戳时间,格林威治时间,float数据类型 给机器用的 # 英国伦敦的时间 1970.1.1 0:0:0 # 北京时间 1970.1.1 8:0:0 # 153369312 ...

  7. IPv4选项

    IPv4数据报的首部由固定首部(20字节)和可变部分组成(40字节).选项可用于网络的测试和排错. 1:选项的组成(TLV:type-length-value) 1.1:一个字节的类型字段. 1.1. ...

  8. servlet练习1

    1. 编写一个Servlet,当用户请求该Servlet时,显示用户于几点几分从哪个IP(Internet Protocol)地址连线至服务器,以及发出的查询字符串(Query String).查询一 ...

  9. centos7配置vsftpd服务器

    参考网站:https://blog.csdn.net/lianghongge/article/details/78209445 ==================================== ...

  10. centos7环境下的Mysql5.7.22安装

    参考网站: https://blog.csdn.net/vipbupafeng/article/details/80271089 1.下载 官网链接:https://dev.mysql.com/dow ...