当前位置: 首页 > news >正文

力扣labuladong一刷day49天迪杰斯特拉

力扣labuladong一刷day49天迪杰斯特拉

文章目录

      • 力扣labuladong一刷day49天迪杰斯特拉
      • 一、743. 网络延迟时间
      • 二、1631. 最小体力消耗路径
      • 三、1514. 概率最大的路径

一、743. 网络延迟时间

题目链接:https://leetcode.cn/problems/network-delay-time/
使用迪杰斯特拉解决加权图某点到所有节点距离的问题。
如果是无权图,采用广度优先遍历即可,就把图想象成一颗树,广度优先就可以说是层序遍历。
而加权图寻找最短距离,最经典算法就是迪杰斯特拉算法,我们可以计算出某一个点到任意一个之间的最短距离。我们采用优先级队列,里面的每一个元素记录的是某点到起点之间的最短距离,我们会一直按照最短距离更新,这样到达结尾后即可得到最短距离。

class Solution {public int networkDelayTime(int[][] times, int n, int k) {List<int[]>[] graph = new ArrayList[n + 1];for (int i = 0; i <= n; i++) {graph[i] = new ArrayList<>();}for (int[] time : times) {int a = time[0], b = time[1], c = time[2];graph[a].add(new int[]{b, c});}int[] dist = djk(k, graph);int res = -1;for (int i = 1; i < dist.length; i++) {if (dist[i] == Integer.MAX_VALUE) return -1;res = Math.max(res, dist[i]);}return res;}class State {int id;int sToMe;public State(int id, int sToMe) {this.id = id;this.sToMe = sToMe;}}int[] djk(int start, List<int[]>[] graph) {int[] dist = new int[graph.length];Arrays.fill(dist, Integer.MAX_VALUE);PriorityQueue<State> pq = new PriorityQueue<>((a, b) -> a.sToMe - b.sToMe);dist[start] = 0;pq.add(new State(start, 0));while (!pq.isEmpty()) {State poll = pq.poll();int id = poll.id;int cur = poll.sToMe;if (cur > dist[id]) continue;for (int[] ints : graph[id]) {int nextId = ints[0];int temp = dist[id] + ints[1];if (temp < dist[nextId]) {dist[nextId] = temp;pq.add(new State(nextId, temp));}}}return dist;}
}

二、1631. 最小体力消耗路径

题目链接:https://leetcode.cn/problems/path-with-minimum-effort/
思路:基本上就是迪杰斯特拉的典型题目,只不过这一次求的是最小消耗,但我们在过程中需要求每一条路径的最大消耗,在去往下一个点时选择这些最大消耗中的最小消耗,做为路径的延伸。

class Solution {public int minimumEffortPath(int[][] heights) {int r = heights.length, c = heights[0].length;return djk(heights);}List<int[]> getList(int x, int y, int r, int c) {int[][] temp = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};List<int[]> list = new ArrayList<>();for (int[] ints : temp) {int nx = x + ints[0], ny = y + ints[1];if (nx < 0 || nx >= r || ny < 0 || ny >= c) continue;list.add(new int[] {nx, ny});}return list;}class State {int x;int y;int sToMe;public State(int x, int y, int sToMe) {this.x = x;this.y = y;this.sToMe = sToMe;}}int djk(int[][] heights) {int r = heights.length, c = heights[0].length;int[][] dist = new int[r][c];PriorityQueue<State> pq = new PriorityQueue<>((a, b)-> a.sToMe - b.sToMe);for (int i = 0; i < r; i++) {Arrays.fill(dist[i], Integer.MAX_VALUE);}pq.add(new State(0, 0, 0));dist[0][0] = 0;while (!pq.isEmpty()) {State poll = pq.poll();int x = poll.x, y = poll.y;int cur = poll.sToMe;if (x == r-1 && y == c-1) return cur;if (cur > dist[x][y]) continue;for (int[] ints : getList(x, y, r, c)) {int nLen =  Math.max(dist[x][y], Math.abs(heights[x][y]-heights[ints[0]][ints[1]]));if (nLen < dist[ints[0]][ints[1]]) {dist[ints[0]][ints[1]] = nLen;pq.add(new State(ints[0], ints[1], nLen));}}}return -1;}
}

三、1514. 概率最大的路径

题目链接:https://leetcode.cn/problems/path-with-maximum-probability/
思路:这题和上一题又有点不一样,相当于求最长路径,那么需要把优先级队列按照从大到小排序即可。

class Solution {public double maxProbability(int n, int[][] edges, double[] succProb, int start_node, int end_node) {List<double[]>[] graph = new ArrayList[n];for (int i = 0; i < n; i++) {graph[i] = new ArrayList<>();}for (int i = 0; i < edges.length; i++) {int from = edges[i][0], to = edges[i][1];graph[from].add(new double[]{to, succProb[i]});graph[to].add(new double[]{from, succProb[i]});}return djk(graph, start_node, end_node);}class State{int id;double sToE;public State(int id, double sToE) {this.id = id;this.sToE = sToE;}}double djk(List<double[]>[] graph, int s, int e) {double[] dist = new double[graph.length];PriorityQueue<State> pq = new PriorityQueue<>((a, b)->Double.compare(b.sToE, a.sToE));Arrays.fill(dist, -1);dist[s] = 1;pq.add(new State(s, 1));while (!pq.isEmpty()) {State poll = pq.poll();int id = poll.id;double cur = poll.sToE;if (id == e) return cur;if (cur < dist[id]) continue;for (double[] ints : graph[id]) {int to = (int) ints[0];double nLen = cur * ints[1];if (nLen > dist[to]) {dist[to] = nLen;pq.add(new State(to, nLen));}}}return 0.0;}
}

相关文章:

力扣labuladong一刷day49天迪杰斯特拉

力扣labuladong一刷day49天迪杰斯特拉 文章目录 力扣labuladong一刷day49天迪杰斯特拉一、743. 网络延迟时间二、1631. 最小体力消耗路径三、1514. 概率最大的路径 一、743. 网络延迟时间 题目链接&#xff1a;https://leetcode.cn/problems/network-delay-time/ 使用迪杰斯特…...

MCS接口技术----定时/计数,中断

目录 一.中断系统相关寄存器 1.51单片机中断系统的总体结构&#xff1a; 2.中断源的中断级别&#xff08;由高到低&#xff09;&#xff1a; 3.与中断有关的四个寄存器&#xff1a; &#xff08;1&#xff09;TCON---定时控制寄存器 &#xff08;2&#xff09;IE---中断允…...

Java开发框架和中间件面试题(10)

目录 104.怎么保证缓存和数据库数据的一致性&#xff1f; 105.什么是缓存穿透&#xff0c;什么是缓存雪崩&#xff1f;怎么解决&#xff1f; 106.如何对数据库进行优化&#xff1f; 107.使用索引时有哪些原则&#xff1f; 108.存储过程如何进行优化&#xff1f; 109.说说…...

C++ 具名要求-基本概念-指定该类型对象可以从右值构造

指定该类型对象可以从右值构造 指定该类型的实例可以从一个右值实参构造。 要求 以下情况下&#xff0c;类型 T 满足可移动构造 (MoveConstructible) &#xff1a; 给定 T 类型的右值表达式 rv任意标识符 u 下列表达式必须合法且拥有其指定的效果 表达式后条件T u rv;u…...

Python如何把类当做字典来访问及浅谈Python类命名空间

Python如何把类当做字典来访问 Python把类当做字典来访问 定义一个类将它实例化&#xff0c;我们可以通过obj.属性来访问类的属性&#xff0c;如果想获取类的所有实例变量&#xff0c;我们可以使用obj.__dict__来访问&#xff0c;如下&#xff1a; class A:def __init__(self)…...

简述Redis备份策略以及对应的实现机制

引言 Redis作为高性能的内存数据库&#xff0c;数据的安全性至关重要。一旦数据丢失&#xff0c;可能会对业务造成重大影响。因此&#xff0c;备份Redis数据是每个Redis使用者都必须考虑的问题。本文将介绍Redis的备份策略以及对应的实现机制。 一、备份策略 1.1 定期备份 …...

【5G PHY】5G 物理层加速卡介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…...

lftp学习笔记

目录 0. ftp vs. lftp1. 安装2. 常用命令2.1 登录2.2 文件管理2.3 文件传输 3. 脚本编程4. 实践中的问题排查参考 0. ftp vs. lftp lftp是一款文件传输工具&#xff0c;支持FTP、HTTP、SFTP、FISH等多种协议。 功能ftplftp数据传输文件文件、文件夹多线程传输支持断点续传支持…...

idea 插件开发之 HelloWorld

前言 本文使用的 idea 2023.3 版本进行插件入门开发&#xff0c;首先要说明的是 idea 2023 版本及以后的 idea&#xff0c;对插件开发进行了一定程度的变动&#xff1a; 1、创建项目时不再支持 maven 选项 2、必须是 jdk17 及以后版本&#xff08;点击查看官网版本对应关系&…...

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…...

【PowerMockito:编写单元测试过程中采用when打桩失效的问题】

问题描述 正如上图所示&#xff0c;采用when打桩了&#xff0c;但是&#xff0c;实际执行的时候还是返回null。 解决方案 打桩时直接用any() 但是这样可能出现一个mybatisplus的异常&#xff0c;所以在测试类中需要加入以下代码片段&#xff1a; Beforepublic void setUp() …...

[蓝桥杯 2018省赛]回家路费

回家路费 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明被不明势力劫持。后莫名其妙被扔到 X 星站再无问津。小明得知每天都有飞船飞往地球&#xff0c;但需要 108108 元的船票&#xff0c;而他却身无分文。…...

学生管理系统(vue + springboot)

学生管理系统&#xff08;vuespringboot&#xff09;资源-CSDN文库 项目介绍 这是一个采用前后端分离开发的项目&#xff0c;前端采用 Vue 开发、后端采用 Spring boot Mybatis 开发。 项目部署 ⭐️如果你有 docker 的话&#xff0c;直接 docker compose up 即可启动&#…...

算法(3)——二分查找

一、什么是二分查找 二分查找也称折半查找&#xff0c;是在一组有序(升序/降序)的数据中查找一个元素&#xff0c;它是一种效率较高的查找方法。 二、二分查找的原理 1、查找的目标数据元素必须是有序的。没有顺序的数据&#xff0c;二分法就失去意义。 2、数据元素通常是数值…...

golang实现可中断的流式下载

golang实现可中断的流式下载 最近有一个需要实现下载功能&#xff1a; 从服务器上读取文件&#xff0c;返回一个ReadCloser在用户磁盘上创建文件&#xff0c;通过io.Copy实现文件下载&#xff08;io.Copy是流式的操作&#xff0c;不会出现因文件过大而内存暴涨的问题&#xff0…...

SpringBoot 医药咨询系统

概述 智慧医药系统&#xff08;smart-medicine&#xff09;是一个基于 SpringBoot 开发的Web 项目。整体页面简约大气&#xff0c;增加了AI医生问诊功能&#xff0c;功能设计的较为简单。 开源地址 https://gitcode.net/NVG_Haru/Java_04 界面预览 功能介绍 游客功能介绍 …...

C语言转WebAssembly的全流程,及Web端调用测试

第一步&#xff1a;安装环境 参考网址&#xff1a;https://emscripten.org/docs/getting_started/downloads.html 具体过程&#xff1a; 克隆代码&#xff1a;git clone https://github.com/emscripten-core/emsdk.git进入代码目录&#xff1a;cd emsdk获取最新远端代码&…...

前端--基础 目录文件夹和根目录 VScode打开目录文件夹

目录 目录文件夹和根目录 &#xff1a; 目录文件夹 &#xff1a; 根目录 &#xff1a; VScode 打开目录文件夹 &#xff1a; VScode 打开文件夹 &#xff1a; 拖拽目录文件夹 &#xff1a; 目录文件夹和根目录 &#xff1a; 我们都清楚&#xff0c;在实际的工作中会…...

传感器原理与应用复习--超声波、微波、红外及热电偶传感器

文章目录 上一篇超声波传感器微波传感器红外传感器热电偶传感器下一篇 上一篇 传感器原理与应用复习–光电式与半导体式传感器 超声波传感器 超过2万赫兹以上的波称为超声波 压电式超声波探头常用材料是压电晶体和压电陶瓷。它是利用压电材料的压电效应来工作的。 逆压电效…...

matlab概率论例子

高斯概率模型&#xff1a; [f,xi] ksdensity(x): returns a probability density estimate, f, for the sample in the vector x. The estimate is based on a normal kernel function, and is evaluated at 100 equally spaced points, xi, that cover the range of the da…...

终极Windows Defender移除指南:13项核心服务的完整卸载方案

终极Windows Defender移除指南&#xff1a;13项核心服务的完整卸载方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirror…...

VHDL转Verilog终极指南:如何用VHD2VL v3.0快速完成硬件描述语言转换

VHDL转Verilog终极指南&#xff1a;如何用VHD2VL v3.0快速完成硬件描述语言转换 【免费下载链接】vhd2vl 项目地址: https://gitcode.com/gh_mirrors/vh/vhd2vl 在FPGA开发领域&#xff0c;VHDL和Verilog是两大主流硬件描述语言&#xff0c;但团队协作或项目迁移时经常…...

阴阳师自动化脚本OAS终极指南:轻松解放双手的完整教程

阴阳师自动化脚本OAS终极指南&#xff1a;轻松解放双手的完整教程 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师自动化脚本OAS是一款专门为《阴阳师》游戏设计的智能自动…...

Navis:开源项目标准化开发环境与工具链配置框架实践

1. 项目概述&#xff1a;一个为开发者打造的“导航星图”如果你和我一样&#xff0c;常年混迹在开源项目的海洋里&#xff0c;那么你一定对这种感觉不陌生&#xff1a;面对一个全新的、功能强大的开源工具&#xff0c;兴奋地克隆了仓库&#xff0c;然后……就卡在了第一步。REA…...

如何选蜂蜜品牌?2026年5月推荐靠谱蜂蜜品牌避坑指南

一、引言买蜂蜜怕踩坑&#xff1f;市面上的蜂蜜产品琳琅满目&#xff0c;但勾兑蜜、浓缩蜜、添加糖浆的“科技蜜”层出不穷&#xff0c;消费者往往花了高价却买不到真正的纯正好蜜。对于注重健康饮食、追求天然原生态食品的消费者而言&#xff0c;如何从海量品牌中筛选出真正无…...

Arduino驱动128x64 VFD显示屏:SPI像素回读与图形应用实战

1. 项目概述&#xff1a;为什么选择128x64图形VFD&#xff1f;如果你玩过各种OLED、LCD或者TFT屏幕&#xff0c;可能会觉得显示技术已经足够成熟&#xff0c;亮度、对比度似乎都够用。但当你第一次点亮一块真空荧光显示屏时&#xff0c;那种独特的、带着一丝复古科技感的蓝色辉…...

MQ-3与MiCS-5524气体传感器对比:从原理到实战的选型指南

1. 项目概述与核心价值在嵌入式开发、环境监测乃至一些创意DIY项目中&#xff0c;气体检测是一个常见且关键的需求。无论是为了安全预警&#xff08;如天然气泄漏&#xff09;&#xff0c;还是进行环境质量评估&#xff08;如VOC监测&#xff09;&#xff0c;选择一款合适的传感…...

μSR技术中的双量子Rabi振荡优化与应用

1. 实验背景与核心原理 在量子物理和凝聚态物理研究中&#xff0c;μ子自旋共振&#xff08;μSR&#xff09;技术是一种独特的探测手段。这项技术利用正μ子&#xff08;μ&#xff09;作为微观探针&#xff0c;通过观测其自旋极化行为来研究材料的局部磁环境。当μ子注入样品…...

Linux内核C11升级:从C89到现代C语言的演进与挑战

1. 项目概述&#xff1a;一次内核语言的“心脏移植”手术最近Linux内核社区放出了一个重磅消息&#xff0c;未来计划将内核的C语言标准从使用了二十多年的C89/C90&#xff0c;升级到C11。这个消息一出&#xff0c;在开发者圈子里激起的讨论&#xff0c;不亚于当年从Python 2迁移…...

Docker里CentOS镜像yum报错?别慌,教你两步搞定‘appstream’仓库元数据下载失败

Docker中CentOS镜像yum报错&#xff1f;三步根治‘appstream’仓库元数据下载失败 当你兴致勃勃地在Docker中启动一个CentOS容器准备大展拳脚时&#xff0c;突然遭遇Failed to download metadata for repo appstream的红色报错&#xff0c;这种挫败感我深有体会。不同于物理机或…...