美文网首页
【算法题】1654. 到家的最少跳跃次数

【算法题】1654. 到家的最少跳跃次数

作者: 程序员小2 | 来源:发表于2023-02-02 09:19 被阅读0次

题目:

有一只跳蚤的家在数轴上的位置 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 中。

java代码:

class Solution {
    static final int LIMIT=8000;
    boolean[] visited;

    public int minimumJumps(int[] forbidden, int a, int b, int x) {
        visited=new boolean[LIMIT];
        Queue<int[]> queue=new ArrayDeque<>();
        for(int num:forbidden){
            visited[num]=true;
        }
        queue.offer(new int[]{0,0,0});
        while(!queue.isEmpty()){
            int size=queue.size();
            for(int i=0;i<size;i++){
                int[] cell=queue.poll();
                int x1=cell[0],y=cell[1],dist=cell[2];
                if(x1==x)return dist;
                if(x1+a<LIMIT&&!visited[x1+a]){
                    visited[x1+a]=true;
                    queue.offer(new int[]{x1+a,0,dist+1});
                }
                if(y==0&&x1-b>0&&!visited[x1-b]){//前进到的点既能后退也能前进,后退到的点不能再后退了
                    queue.offer(new int[]{x1-b,1,dist+1});
                }
            }
        }
        return -1;
    }
}

相关文章

  • 【算法题】1654. 到家的最少跳跃次数

    题目: 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。 跳蚤跳跃的规则如下: 它可...

  • Java集合类工作原理及实现

    集合类的实现原理 LRUCache原理 Lru是最近最少使用算法的简称,意思呢就是查询出最近的时间使用次数最少的那...

  • 数据结构 排序习题

    一、 单项选择题(共71题) 对n个元素的序列进行冒泡排序时,最少的比较次数是( )。A. n ...

  • 贪心算法-最优加油方法

    题目 思路 题目要求最少加油次数,为了加油次数最少,我们需要考虑下面的问题 什么时候加油能使得加油次数最少?当油用...

  • 【算法题】15.跳跃游戏

    题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断...

  • ORID 58 Meeting rooms II

    今天每日一题253. Meeting rooms II 用什么算法? 这道题首先要理解题意,为了用最少的房间来安排...

  • iOS 算法题-最小运算次数

    分析:(X -> Y) 1、当X>Y时只能做减法运算。2、当X

  • 最少跳跃步数(跳跃游戏2)

    题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的...

  • BFS算法示例 - 解开密码锁的最少次数

    概念 BFS(广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。 BFS算法的核心思...

  • lettcode刷题之贪心

    leetcode刷题,使用python 1, 跳跃游戏 II —— 0045 贪心算法给定一个长度为 n 的 0...

网友评论

      本文标题:【算法题】1654. 到家的最少跳跃次数

      本文链接:https://www.haomeiwen.com/subject/lcpwhdtx.html