当前位置:网站首页>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;
}
}边栏推荐
- 数据中台落地实施之法
- 【DesignMode】享元模式(Flyweight Pattern)
- 正在准备面试,分享面经
- Opportunity interview experience summary
- Three. JS series (2): API structure diagram-2
- 01tire+链式前向星+dfs+贪心练习题.1
- LeetCode 1774. 最接近目标价格的甜点成本 每日一题
- [medical segmentation] attention Unet
- Binary search tree (basic operation)
- DAPP defi NFT LP single and dual currency liquidity mining system development details and source code
猜你喜欢

Spark Tuning (III): persistence reduces secondary queries

Sort out several important Android knowledge and advanced Android development interview questions
最新Android高级面试题汇总,Android面试题及答案

Cesium(3):ThirdParty/zip. js

应用在温度检测仪中的温度传感芯片

字节跳动高工面试,轻松入门flutter

两类更新丢失及解决办法

HAVE FUN | “飞船计划”活动最新进展

Personal notes of graphics (2)

水平垂直居中 方法 和兼容
随机推荐
【C 语言】 题集 of Ⅹ
【PHP】PHP接口继承及接口多继承原理与实现方法
The differences between exit, exit (0), exit (1), exit ('0 '), exit ('1'), die and return in PHP
LeetCode 1043. 分隔数组以得到最大和 每日一题
最新Android面试合集,android视频提取音频
【图像传感器】相关双采样CDS
深度监听 数组深度监听 watch
Ray and OBB intersection detection
ByteDance Android gold, silver and four analysis, Android interview question app
作为Android开发程序员,android高级面试
A tour of gRPC:03 - proto序列化/反序列化
Three. JS series (3): porting shaders in shadertoy
[designmode] proxy pattern
typescript ts 基础知识之类型声明
How can laravel get the public path
Horizontal and vertical centering method and compatibility
射线与OBB相交检测
LeetCode 1986. 完成任务的最少工作时间段 每日一题
[C language] question set of X
JS modularization