门户网站定义谷歌网站排名
门户网站定义,谷歌网站排名,wordpress 分类 排序,软文推广例子一只青蛙想要过河。 假定河流被等分为 x 个单元格#xff0c;并且在每一个单元格内都有可能放有一石子#xff08;也有可能没有#xff09;。 青蛙可以跳上石头#xff0c;但是不可以跳入水中。
给定石子的位置列表#xff08;用单元格序号升序表示#xff09;#xff…一只青蛙想要过河。 假定河流被等分为 x 个单元格并且在每一个单元格内都有可能放有一石子也有可能没有。 青蛙可以跳上石头但是不可以跳入水中。
给定石子的位置列表用单元格序号升序表示 请判定青蛙能否成功过河即能否在最后一步跳至最后一个石子上。 开始时 青蛙默认已站在第一个石子上并可以假定它第一步只能跳跃一个单位即只能从单元格1跳至单元格2。
如果青蛙上一步跳跃了 k 个单位那么它接下来的跳跃距离只能选择为 k - 1、k 或 k 1个单位。 另请注意青蛙只能向前方终点的方向跳跃。
请注意
石子的数量 ≥ 2 且 1100 每一个石子的位置序号都是一个非负整数且其 231 第一个石子的位置永远是0。 示例 1:
[0,1,3,5,6,8,12,17]
总共有8个石子。 第一个石子处于序号为0的单元格的位置, 第二个石子处于序号为1的单元格的位置, 第三个石子在序号为3的单元格的位置 以此定义整个数组... 最后一个石子处于序号为17的单元格的位置。
返回 true。即青蛙可以成功过河按照如下方案跳跃 跳1个单位到第2块石子, 然后跳2个单位到第3块石子, 接着 跳2个单位到第4块石子, 然后跳3个单位到第6块石子, 跳4个单位到第7块石子, 最后跳5个单位到第8个石子即最后一块石子。 示例 2:
[0,1,2,3,4,8,9,11]
返回 false。青蛙没有办法过河。 这是因为第5和第6个石子之间的间距太大没有可选的方案供青蛙跳跃过去。
思路
在动态规划方法中我们会利用散列表map对于散列表中的 key:valuekey 表示当前石头的位置value 是一个包含 jumpsize 的集合其中每个 jumpsize 代表可以通过大小为jumpysize 的一跳到达当前位置。
首先我们对散列表初始化key 为所有石头的位置除了位置 0 对应的value 为包含一个值 0 的集合以外其余都初始化为空集。接下来依次遍历每个位置上的石头。对于每个currentPosition遍历value 中每个jumpsize判断位置currentPositionnewjumpsize 是否存在于map 中对于每个 jumpsizenewjumpsize 分别为jumpsize−1jumpsizejumpsize1。
如果找到了就在对应的 value 集合里新增 newjumpsize。重复这个过程直到结束。如果在结束的时候最后一个位置对应的集合非空那也就意味着我们可以到达终点如果还是空集那就意味着不能到达终点。
public class Solution {public boolean canCross(int[] stones) {HashMapInteger, SetInteger map new HashMap();for (int i 0; i stones.length; i) {map.put(stones[i], new HashSetInteger());}map.get(0).add(0);for (int i 0; i stones.length; i) {for (int k : map.get(stones[i])) {for (int step k - 1; step k 1; step) {if (step 0 map.containsKey(stones[i] step)) {map.get(stones[i] step).add(step);}}}}return map.get(stones[stones.length - 1]).size() 0;}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92667.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!