栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode1345. 跳跃游戏 IV(hard)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode1345. 跳跃游戏 IV(hard)

跳跃游戏 IV

解题思路

代码复杂度
力扣链接

解题思路

官方题解
大佬题解

广度优先搜索 代码

class Solution {
    public int minJumps(int[] arr) {
        //key是元素值,value是相同元素值的索引集合
        Map> map = new HashMap<>();
        
        int n = arr.length;
        //遍历数组,先需要找出所有的值相同的子图,用一个哈希表 map 保存。
        for (int i = 0; i < n; ++i) {
            map.putIfAbsent(arr[i], new ArrayList<>());
            map.get(arr[i]).add(i);
        }

        //在第一次访问到这个子图中的某个节点时,即会将这个子图的所有其他未在队列中的节点都放入队列。在第二次访问到这个子图中的节点时,就不需要去考虑这个子图中的其他节点了,因为所有其他节点都已经在队列中或者已经被访问过了。
        Queue q = new linkedList<>();
        //记录某个节点是否被访问过,存放索引即可
        Set visited = new HashSet<>();
        //将当起点添加visited集合中
        visited.add(0);
        //将起点添加到队列中,第一个0为当前位置的索引,第二个0是移动的步数
        q.offer(new int[]{0, 0});

        while (!q.isEmpty()) {
            int[] poll = q.poll();
            int i = poll[0];
            int step = poll[1];
            //如果弹出的节点的索引是n - 1,说明找到了步数最少的值,直接返回步数
            if (i == n - 1) {
                return step;
            }

            //步数+1
            ++step;
            int v = arr[i];
            if (map.containsKey(v)) {
                //将当前点的相同值的索引集合添加到队列中,即下一步可以移动到的位置
                for (int index : map.get(v)) {
                    //如果成功添加到集合中,说明当前点未被访问过,将其添加到队列中
                    if (visited.add(index)) {
                        q.offer(new int[]{index, step});
                    }
                    //在第一次把这个子图的所有节点放入队列后,把该子图清空,就不会重复访问该子图的其他边了。
                    map.remove(v);
                }
            }
            

            //将前一个点添加到队列中
            if (i + 1 < n && visited.add(i + 1)) {
                q.offer(new int[]{i + 1, step});
            }

            //将后一个点添加到队列中
            if (i - 1 >= 0 && visited.add(i - 1)) {
                q.offer(new int[]{i - 1, step});
            }
        }
        return 666;
    }

}
复杂度

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/712919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号