当前位置:网站首页>LeetCode 1654. 到家的最少跳跃次数 每日一题
LeetCode 1654. 到家的最少跳跃次数 每日一题
2022-07-07 15:32:00 【@小红花】
问题描述
有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。
跳蚤跳跃的规则如下:
它可以 往前 跳恰好 a 个位置(即往右跳)。
它可以 往后 跳恰好 b 个位置(即往左跳)。
它不能 连续 往后跳 2 次。
它不能跳到任何 forbidden 数组中的位置。
跳蚤可以往前跳 超过 它的家的位置,但是它 不能跳到负整数 的位置。给你一个整数数组 forbidden ,其中 forbidden[i] 是跳蚤不能跳到的位置,同时给你整数 a, b 和 x ,请你返回跳蚤到家的最少跳跃次数。如果没有恰好到达 x 的可行方案,请你返回 -1 。
示例 1:
输入:forbidden = [14,4,18,1,15], a = 3, b = 15, x = 9
输出:3
解释:往前跳 3 次(0 -> 3 -> 6 -> 9),跳蚤就到家了。
示例 2:输入:forbidden = [8,3,16,6,12,20], a = 15, b = 13, x = 11
输出:-1
示例 3:输入:forbidden = [1,6,2,14,5,17,4], a = 16, b = 9, x = 7
输出:2
解释:往前跳一次(0 -> 16),然后往回跳一次(16 -> 7),跳蚤就到家了。
提示:
1 <= forbidden.length <= 1000
1 <= a, b, forbidden[i] <= 2000
0 <= x <= 2000
forbidden 中所有位置互不相同。
位置 x 不在 forbidden 中。来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-jumps-to-reach-home
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Java
class Solution {
public int minimumJumps(int[] forbidden, int a, int b, int x) {
//记录禁止到达的位置
Set<Integer> set = new HashSet<>();
for(int forbid : forbidden) set.add(forbid);
Queue<int[]> queue = new LinkedList<>();//当前位置,往回跳的次数
queue.offer(new int[]{0,0});
boolean[][] visible = new boolean[8000][2];
int ans = -1;
while(!queue.isEmpty()){
int size = queue.size();
ans++;
for(int i = 0;i < size;i++){
int[] t = queue.poll();
int position = t[0];
if(position == x) return ans;
int rollbackCount = t[1];
if(visible[position][rollbackCount]) continue;
visible[position][rollbackCount] = true;
//向前跳
if(position + a < 8000 && !set.contains(position + a)){
queue.offer(new int[]{position + a,0});
}
//向后跳
if(position - b >= 0 && !set.contains(position - b) && rollbackCount == 0){
queue.offer(new int[]{position - b,rollbackCount + 1});
}
}
}
return -1;
}
}边栏推荐
- SqlServer2014+: 创建表的同时创建索引
- Imitate the choice of enterprise wechat conference room
- Master this set of refined Android advanced interview questions analysis, oppoandroid interview questions
- Laravel constructor and middleware execution order
- AutoLISP series (2): function function 2
- 整理几个重要的Android知识,高级Android开发面试题
- typescript ts 基础知识之类型声明
- As an Android Developer programmer, Android advanced interview
- Pisa-Proxy SQL 解析之 Lex & Yacc
- LeetCode 1155. 掷骰子的N种方法 每日一题
猜你喜欢

Module VI
![[C language] question set of X](/img/17/bfa57de183c44cf0a3c6637bb65a9d.jpg)
[C language] question set of X

【MySql进阶】索引详解(一):索引数据页结构
As an Android Developer programmer, Android advanced interview

Tragedy caused by deleting the console statement

面向接口编程

如何快速检查钢网开口面积比是否符合 IPC7525

最新Android面试合集,android视频提取音频

Sort out several important Android knowledge and advanced Android development interview questions

Record the migration process of a project
随机推荐
null == undefined
LeetCode 1774. 最接近目标价格的甜点成本 每日一题
第九届 蓝桥杯 决赛 交换次数
【DesignMode】代理模式(proxy pattern)
字节跳动Android金三银四解析,android面试题app
Interface oriented programming
Talk about the realization of authority control and transaction record function of SAP system
Lie cow count (spring daily question 53)
面向接口编程
QT中自定义控件的创建到封装到工具栏过程(二):自定义控件封装到工具栏
预售17.9万,恒驰5能不能火?产品力在线,就看怎么卖
两类更新丢失及解决办法
使用JSON.stringify()去实现深拷贝,要小心哦,可能有巨坑
As an Android Developer programmer, Android advanced interview
LeetCode 1186. 删除一次得到子数组最大和 每日一题
值得一看,面试考点与面试技巧
URL和URI的关系
最新Android面试合集,android视频提取音频
DAPP defi NFT LP single and dual currency liquidity mining system development details and source code
数据中台落地实施之法