📝前言说明:

  • 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分
  • 每题主要记录:(1)本人解法 + 本人屎山代码;(2)优质解法 + 优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话)
  • 文章中的理解仅为个人理解。如有错误,感谢纠错

🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C语言入门基础,python入门基础,C++学习笔记,Linux
🎀CSDN主页 愚润泽

你可以点击下方链接,进行该专题内不同子专题的学习

点击链接开始学习
双指针(1)双指针(2)
双指针(3)双指针(4)
滑动窗口(1)滑动窗口(2)
滑动窗口(3)滑动窗口(4)
二分查找(1)二分查找(2)
前缀和(1)前缀和(2)
前缀和(3)位运算(1)
位运算(2)模拟算法
快速排序归并排序
链表哈希表
字符串
队列 + 宽搜优先级队列
BFS 解决 FloodFillBFS 解决最短路径
多源 BFSBFS 解决拓扑排序

题单汇总链接:点击 → 题单汇总(暂时未整理,因为还没刷完)

题目

  • 导论——多源 BFS
  • 542. 01 矩阵
    • 优质解
  • 1020. 飞地的数量
    • 个人解
  • 1765. 地图中的最高点
    • 个人解
  • 1162. 地图分析
    • 个人解


导论——多源 BFS

多元最短路问题:起始点有多个,去同一个终点

  • 前提:BFS解决的最短路问题都是边权为 1 的
  • 解法一:把多源最短路问题转换成若干个单源最短路问题——暴力枚举每个起点,对每个起点进行单源最短路问题分析【但是时间复杂度高:超时】
  • 解法二:把所有的源点当成一个“超级源点”——从“超级源点”出发,一次单源最短路问题
    • 如何求:“超级源点” ?
    • 把所有的起始节点加入到队列中,即:第一层由单源的一个节点变成了多源的多个节点(只不过这些节点都属于第一层罢了)
    • 多个源点可能开辟出不同的路,在不同的路中:后到达的节点会被hash淘汰

542. 01 矩阵

题目链接:https://leetcode.cn/problems/01-matrix/description/
在这里插入图片描述


优质解

思路:

  • 解法一:把 1 当成起点的话,要遍历整个矩阵
  • 解法二:把 0 当起点:从所有 0 走到某一个 1 的最短距离 == 从 1 走到最近 0 的距离

代码:

class Solution {
public:vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};int m = mat.size(), n = mat[0].size();queue<pair<int, int>> q;vector<vector<int>> dis(m, vector<int>(n, -1));// 先获得"超级源点"for(int i = 0 ; i < m; i++){for(int j = 0; j < n; j++){if(mat[i][j] == 0){q.push({i, j});dis[i][j] = 0;}}}// 从"超级源点"开始扩展while(q.size()){// int sz = q.size(); 为什么可以不计算 sz ?// 因为之前的 sz 是和 step 配合使用的,我们通过sz知道是在哪一层// 但是现在,下一个dis中填写的内容可以根据上一个dis中的内容决定// 并且,一定是上一层的节点pop出去以后,才会处理上一层加入的后续节点auto [a, b] = q.front();q.pop();for(int j = 0; j < 4; j++){int x = a + dx[j], y = b + dy[j];if(x >= 0 && x < m && y >= 0 && y < n && dis[x][y] == -1){dis[x][y] = dis[a][b] + 1;q.push({x, y}); }}}return dis;}
};

时间复杂度:O(m∗n)O(m*n)O(mn)
空间复杂度:O(m∗n)O(m*n)O(mn)


1020. 飞地的数量

题目链接:https://leetcode.cn/problems/number-of-enclaves/description/
在这里插入图片描述

个人解

屎山代码:

class Solution {
public:int numEnclaves(vector<vector<int>>& grid) {// 这就是 floodfill// 只不过从边缘 1 开始先标记连通块的时候可以使用 多源 bfs 标记int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};int m = grid.size(), n = grid[0].size();queue<pair<int, int>> q;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if((i == 0 || i == m - 1 || j == 0 || j == n - 1) && grid[i][j]){grid[i][j] = 0;q.push({i, j});}}}while(q.size()){auto [a, b] = q.front();q.pop();for(int i = 0; i < 4; i++){int x = a + dx[i], y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && grid[x][y]){grid[x][y] = 0;q.push({x, y});}}}int ans = 0;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid[i][j])ans++;}}return ans;}
};

时间复杂度:O(m∗n)O(m*n)O(mn)
空间复杂度:O(m∗n)O(m*n)O(mn)


1765. 地图中的最高点

题目链接:https://leetcode.cn/problems/map-of-highest-peak/description/
在这里插入图片描述

个人解

思路:

  • 和 01 矩阵一样

屎山代码:

class Solution {
public:vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {// 自行安排出最高高度// 以水域为起点,能到达的最远的陆地最高(走最短路径)int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};int m = isWater.size(), n = isWater[0].size();vector<vector<int>> high(m, vector<int>(n, -1));queue<pair<int, int>> q;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(isWater[i][j]){q.push({i, j});high[i][j] = 0;}}}while(q.size()){auto [a, b] = q.front();q.pop();for(int i = 0; i < 4; i++){int x = a + dx[i], y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && high[x][y] == -1){high[x][y] = high[a][b] + 1;q.push({x, y});}}}return high;}
};

时间复杂度:O(m∗n)O(m*n)O(mn)
空间复杂度:O(m∗n)O(m*n)O(mn)


1162. 地图分析

题目链接:https://leetcode.cn/problems/as-far-from-land-as-possible/description/
在这里插入图片描述

个人解

思路:

// 海洋到最近的陆地的距离 == 陆地到海洋的最短路径
// 以陆地为起始点做 bfs

用时:14:00
屎山代码:

class Solution {
public:int maxDistance(vector<vector<int>>& grid) {int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};int m = grid.size(), n = grid[0].size();queue<pair<int, int>> q;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid[i][j])q.push({i, j});}}int ans = 0;while(q.size()){auto [a, b] = q.front();q.pop();for(int i = 0; i < 4; i++){int x = a + dx[i], y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && !grid[x][y]){grid[x][y] = grid[a][b] + 1;ans = max(ans, grid[x][y]);q.push({x, y});}}}return ans - 1; // 因为第一次是 1 -> 2,但其实是 1}
};

时间复杂度:O(m∗n)O(m*n)O(mn)
空间复杂度:O(m∗n)O(m*n)O(mn)


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917312.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917312.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917312.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

京东零售在智能供应链领域的前沿探索与技术实践

近日&#xff0c;“智汇运河 智算未来”2025人工智能创新创业大会在杭州召开。香港工程科学院院士、香港大学副校长、研究生院院长、讲座教授、京东零售供应链首席科学家申作军教授与供应链算法团队技术总监戚永志博士受邀出席并担任《AI智慧物流与供应链分享会》联席主席&…

MyBatisPlus之CRUD接口(IService与BaseMapper)

MyBatisPlus之CRUD接口—IService与BaseMapper一、BaseMapper与IService的关系二、BaseMapper核心方法详解2.1 新增操作&#xff08;Insert&#xff09;2.2 查询操作&#xff08;Select&#xff09;2.3 更新操作&#xff08;Update&#xff09;2.4 删除操作&#xff08;Delete&…

axios请求的取消

axios请求的取消解决&#xff1a;axios请求的取消解决&#xff1a;axios请求的取消 在使用 Axios 发起请求时&#xff0c;有时候你可能需要取消这些请求&#xff0c;比如当组件销毁时或者用户操作导致不再需要获取之前发起的请求结果。Axios 支持通过 Cancel Token 取消请求。 …

深入理解C++中的Lazy Evaluation:延迟计算的艺术

在编程世界里&#xff0c;“最好的运算就是从未执行的运算” —— 这句话深刻揭示了性能优化的核心思路。如果一个计算过程最终不会被使用&#xff0c;那么提前执行它就是纯粹的资源浪费。这种思想衍生出了 Lazy Evaluation&#xff08;缓式评估&#xff09; 技术&#xff1a;延…

php完整处理word中表单数据的方法

使用php基础方式实现word中表单处理<?php/*** zipFile 类用于处理 .docx 文件的解压、修改和重新打包*/ class zipFile {/** var ZipArchive ZIP 文件对象 */private $zipFile;/** var string 临时目录路径 */private $tempDir;/** var string 嵌入的 Excel 文件临时目录路…

Node.js 操作 MongoDB

目录 Node.js 操作 MongoDB 一、什么是 MongoDB&#xff1f; 二、MongoDB 的功能概览 三、MongoDB 的安装与启动 安装 MongoDB&#xff08;以本地安装为例&#xff09; 启动 MongoDB 四、Node.js 如何连接 MongoDB&#xff1f; 使用 Mongoose ODM 工具 建立连接 五、…

先学Python还是c++?

选择先学Python还是C&#xff0c;取决于你的学习目标、应用场景和职业规划。以下是两者的对比分析和建议&#xff0c;帮助你做出更适合自己的选择&#xff1a;一、核心差异对比维度PythonC学习曲线简单易上手&#xff08;语法接近自然语言&#xff09;复杂&#xff08;需理解指…

Trae + Notion MCP:将你的Notion数据库升级为智能对话机器人

前言 Notion作为一款功能强大的信息管理工具&#xff0c;被广泛用于项目跟踪、知识库构建和数据整理。然而&#xff0c;随着数据量的增长&#xff0c;我们常常会发现自己陷入了重复和繁琐的操作中。比如&#xff0c;为了找到符合特定条件的几条数据&#xff0c;需要在庞大的数…

【iOS】retain/release底层实现原理

文章目录前言前情知识retain和release的实现原理&#xff08;MRC手动管理&#xff09;retain&#xff08;MRC手动管理&#xff09;retain源码内联函数rootRetain源码相关的sidetable_tryRetain()方法retain底层工作流程总结releaserelease源码内联函数rootRelease源码小结前言 …

文件同步神器-rsync命令讲解

rsync 是一个强大的文件同步与传输工具&#xff0c;广泛用于本地或远程服务器之间的高效文件备份、镜像或同步。其核心优势是通过增量传输​&#xff08;仅传输文件差异部分&#xff09;和压缩减少数据传输量&#xff0c;同时支持保留文件元数据&#xff08;如权限、时间戳、所…

Rust: 工具链版本更新

遇到 cargo build --release 错误&#xff0c;比如&#xff0c;当前 Rust 工具链版本&#xff08;1.78.0&#xff09;低于依赖项所需的最低版本&#xff08;部分依赖要求 ≥1.82.0&#xff09;。以下是系统化的解决方案&#xff1a; &#x1f527; 一、升级 Rust 工具链&#x…

Prompt-to-Prompt| 修改Attention会有“反向传播”或梯度计算?

需要注意的几个问题&#xff1a;额外计算开销&#xff1a;Cross-Attention Control原因&#xff1a;Prompt-to-Prompt的编辑方法需要动态干预交叉注意力&#xff08;Cross-Attention&#xff09;层的权重&#xff0c;这会引入额外的计算和显存占用&#xff1a;需要缓存注意力矩…

电商API接口的优势、数据采集方法及功能说明

一、电商API接口的核心优势1. 高效性与准确性数据采集效率&#xff1a;API通过标准化参数&#xff08;如商品ID、类目&#xff09;直接获取结构化数据&#xff08;JSON/XML&#xff09;&#xff0c;无需解析HTML&#xff0c;减少误差。例如&#xff0c;采集1000条商品信息&…

iOS企业签名掉签,iOS企业签名掉签了怎么办?

不能上架到App Store的iOS应用 &#xff0c;几乎每一个开发者的选择都是通过iOS签名这种内测渠道来完成APP的上架任务&#xff0c;最常用的就是企业签名、超级签名以及TF上架&#xff0c;其中最受欢迎的当属于企业签名了。不过企业签名会出现掉签的现象&#xff0c;那么企业签名…

存储成本深度优化:冷热分层与生命周期管理——从视频平台年省200万实践解析智能存储架构

一、冷热分层&#xff1a;存储成本优化的核心逻辑1.1 数据访问的“二八定律”据行业统计&#xff0c;80%的访问集中在20%的热数据上&#xff0c;而超过90天的历史数据访问频率下降70%以上。某视频平台存储超10PB媒体文件&#xff0c;未分层前年存储成本高达680万元&#xff0c;…

Java设计模式之《备忘录模式》

目录 1. 概念 1.1、定义 1.2、适用场景 2、角色划分 3、实现 1、Originator&#xff08;发起人&#xff09; 2、Memento&#xff08;备忘录&#xff09; 3、Caretaker&#xff08;管理者&#xff09; 4、使用示例 4、优缺点 4.1、优点 4.2、缺点 前言 备忘录模式是…

SpringBoot 多环境配置

在实际项目开发中&#xff0c;不同环境往往有不同的配置需求&#xff1a; 开发环境&#xff08;dev&#xff09;&#xff1a;本地调试&#xff0c;连接测试数据库&#xff1b;测试环境&#xff08;test&#xff09;&#xff1a;接口联调&#xff0c;接近真实场景&#xff1b;生…

延凡智慧医院数字孪生平台

延凡智慧医院数字孪生平台是延凡科技依托物联网、数字孪生、AI 算法及边缘计算技术打造的医疗场景全要素数字化解决方案&#xff0c;通过构建医院物理实体与虚拟空间的实时映射&#xff0c;实现医疗资源优化、运营效率提升及患者体验升级。一、平台价值&#xff08;一&#xff…

谈谈WebAssembly、PWA、Web Workers的作用和场景

WebAssembly、PWA 和 Web Workers 是现代 Web 开发中提升性能、扩展能力的重要技术&#xff0c;各自解决不同场景的问题&#xff0c;以下结合实际使用经验分析&#xff1a;一、WebAssembly&#xff08;Wasm&#xff09;&#xff1a;高性能代码执行作用&#xff1a;WebAssembly …

嵌入式第十八课!!数据结构篇入门及单向链表

在前几章对C语言的学习中&#xff0c;我们学到了&#xff1a;基本的C语法和简单算法面向过程的编程思想而在数据结构这一篇章&#xff0c;我们将要学习&#xff1a;常用的数据存储结构算法面向对象的编程思想数据结构在正式开始学习之前&#xff0c;我们先来了解一下什么是数据…