力扣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. 网络延迟时间 题目链接:https://leetcode.cn/problems/network-delay-time/ 使用迪杰斯特…...
MCS接口技术----定时/计数,中断
目录 一.中断系统相关寄存器 1.51单片机中断系统的总体结构: 2.中断源的中断级别(由高到低): 3.与中断有关的四个寄存器: (1)TCON---定时控制寄存器 (2)IE---中断允…...
Java开发框架和中间件面试题(10)
目录 104.怎么保证缓存和数据库数据的一致性? 105.什么是缓存穿透,什么是缓存雪崩?怎么解决? 106.如何对数据库进行优化? 107.使用索引时有哪些原则? 108.存储过程如何进行优化? 109.说说…...
C++ 具名要求-基本概念-指定该类型对象可以从右值构造
指定该类型对象可以从右值构造 指定该类型的实例可以从一个右值实参构造。 要求 以下情况下,类型 T 满足可移动构造 (MoveConstructible) : 给定 T 类型的右值表达式 rv任意标识符 u 下列表达式必须合法且拥有其指定的效果 表达式后条件T u rv;u…...
Python如何把类当做字典来访问及浅谈Python类命名空间
Python如何把类当做字典来访问 Python把类当做字典来访问 定义一个类将它实例化,我们可以通过obj.属性来访问类的属性,如果想获取类的所有实例变量,我们可以使用obj.__dict__来访问,如下: class A:def __init__(self)…...
简述Redis备份策略以及对应的实现机制
引言 Redis作为高性能的内存数据库,数据的安全性至关重要。一旦数据丢失,可能会对业务造成重大影响。因此,备份Redis数据是每个Redis使用者都必须考虑的问题。本文将介绍Redis的备份策略以及对应的实现机制。 一、备份策略 1.1 定期备份 …...
【5G PHY】5G 物理层加速卡介绍
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...
lftp学习笔记
目录 0. ftp vs. lftp1. 安装2. 常用命令2.1 登录2.2 文件管理2.3 文件传输 3. 脚本编程4. 实践中的问题排查参考 0. ftp vs. lftp lftp是一款文件传输工具,支持FTP、HTTP、SFTP、FISH等多种协议。 功能ftplftp数据传输文件文件、文件夹多线程传输支持断点续传支持…...
idea 插件开发之 HelloWorld
前言 本文使用的 idea 2023.3 版本进行插件入门开发,首先要说明的是 idea 2023 版本及以后的 idea,对插件开发进行了一定程度的变动: 1、创建项目时不再支持 maven 选项 2、必须是 jdk17 及以后版本(点击查看官网版本对应关系&…...
极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件
文章目录 前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库,我们需要两个软件的支持,分别是cpolar(用于搭建内网穿透数据隧道…...
【PowerMockito:编写单元测试过程中采用when打桩失效的问题】
问题描述 正如上图所示,采用when打桩了,但是,实际执行的时候还是返回null。 解决方案 打桩时直接用any() 但是这样可能出现一个mybatisplus的异常,所以在测试类中需要加入以下代码片段: Beforepublic void setUp() …...
[蓝桥杯 2018省赛]回家路费
回家路费 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明被不明势力劫持。后莫名其妙被扔到 X 星站再无问津。小明得知每天都有飞船飞往地球,但需要 108108 元的船票,而他却身无分文。…...
学生管理系统(vue + springboot)
学生管理系统(vuespringboot)资源-CSDN文库 项目介绍 这是一个采用前后端分离开发的项目,前端采用 Vue 开发、后端采用 Spring boot Mybatis 开发。 项目部署 ⭐️如果你有 docker 的话,直接 docker compose up 即可启动&#…...
算法(3)——二分查找
一、什么是二分查找 二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。 二、二分查找的原理 1、查找的目标数据元素必须是有序的。没有顺序的数据,二分法就失去意义。 2、数据元素通常是数值…...
golang实现可中断的流式下载
golang实现可中断的流式下载 最近有一个需要实现下载功能: 从服务器上读取文件,返回一个ReadCloser在用户磁盘上创建文件,通过io.Copy实现文件下载(io.Copy是流式的操作,不会出现因文件过大而内存暴涨的问题࿰…...
SpringBoot 医药咨询系统
概述 智慧医药系统(smart-medicine)是一个基于 SpringBoot 开发的Web 项目。整体页面简约大气,增加了AI医生问诊功能,功能设计的较为简单。 开源地址 https://gitcode.net/NVG_Haru/Java_04 界面预览 功能介绍 游客功能介绍 …...
C语言转WebAssembly的全流程,及Web端调用测试
第一步:安装环境 参考网址:https://emscripten.org/docs/getting_started/downloads.html 具体过程: 克隆代码:git clone https://github.com/emscripten-core/emsdk.git进入代码目录:cd emsdk获取最新远端代码&…...
前端--基础 目录文件夹和根目录 VScode打开目录文件夹
目录 目录文件夹和根目录 : 目录文件夹 : 根目录 : VScode 打开目录文件夹 : VScode 打开文件夹 : 拖拽目录文件夹 : 目录文件夹和根目录 : 我们都清楚,在实际的工作中会…...
传感器原理与应用复习--超声波、微波、红外及热电偶传感器
文章目录 上一篇超声波传感器微波传感器红外传感器热电偶传感器下一篇 上一篇 传感器原理与应用复习–光电式与半导体式传感器 超声波传感器 超过2万赫兹以上的波称为超声波 压电式超声波探头常用材料是压电晶体和压电陶瓷。它是利用压电材料的压电效应来工作的。 逆压电效…...
matlab概率论例子
高斯概率模型: [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…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
