力扣labuladong——一刷day84

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、力扣743. 网络延迟时间](#一、力扣743. 网络延迟时间)

前言

Dijkstra 算法(一般音译成迪杰斯特拉算法)无非就是一个 BFS 算法的加强版,它们都是从二叉树的层序遍历衍生出来的


一、力扣743. 网络延迟时间

java 复制代码
class Solution {
    public int networkDelayTime(int[][] times, int n, int k) {
        List<int[]>[] graph = new LinkedList[n+1];
        for(int i = 1; i <= n; i ++){
            graph[i] = new LinkedList<int[]>();
        }
        for(int[] time : times){
            int from = time[0];
            int to = time[1];
            int w = time[2];
            graph[from].add(new int[]{to,w});
        }
        int[] result = dijkstra(k,graph);
        int res = 0;
        for(int i = 1; i < result.length; i ++){
            if(result[i] == Integer.MAX_VALUE){
                return -1;
            }
            res = Math.max(res,result[i]);
        }
        return res;
    }
    class State{
        int id;
        int distFromStart;
        public State(int id, int distFromStart){
            this.id = id;
            this.distFromStart = distFromStart;
        }
    }
    public int[] dijkstra(int start, List<int[]>[] graph){
        int n = graph.length;
        int[] result = new int[n];
        PriorityQueue<State> pq = new PriorityQueue<>(
            (a,b)->{
                return a.distFromStart - b.distFromStart;
            }
        );
        Arrays.fill(result,Integer.MAX_VALUE);
        result[start] = 0;
        pq.offer(new State(start,0));
        while(!pq.isEmpty()){
            State curV = pq.poll();
            int curId = curV.id;
            int curDistFromStart = curV.distFromStart;
            if(curDistFromStart > result[curId]){
                continue;
            }
            for(int[] next : graph[curId]){
                int nextId = next[0];
                int nextDist =  result[curId] + next[1];
                if(result[nextId] > nextDist){
                    result[nextId] = nextDist;
                    pq.offer(new State(nextId, result[nextId]));
                }
            }
        }
        return result;
    }
}
相关推荐
從南走到北4 分钟前
JAVA同城信息付费系统家政服务房屋租赁房屋买卖房屋装修信息发布平台小程序APP公众号源码
java·开发语言·小程序
TechMasterPlus14 分钟前
java:单例模式
java·开发语言·单例模式
Star在努力16 分钟前
C语言复习八(2025.11.18)
c语言·算法·排序算法
程序员小远22 分钟前
如何搭建Appium环境?
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例
南山安23 分钟前
从反转字符串看透面试官的“内心戏”:你的算法思维到底怎么样?
javascript·算法·面试
JIngJaneIL26 分钟前
远程在线诊疗|在线诊疗|基于java和小程序的在线诊疗系统小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·在线诊疗小程序
will_we26 分钟前
Spring Boot4正式篇:第二篇 多版本API特性
java·后端
风筝在晴天搁浅27 分钟前
代码随想录 70.爬楼梯
java
好好研究29 分钟前
SpringMVC框架 - 文件上传
java·spring·mvc·idea
雪不下29 分钟前
计算机中的数学:概率(2)
算法