![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
工作级难度算法题解
文章平均质量分 95
以力扣周赛第三题为主。
闻缺陷则喜何志丹
本人拙作《喜缺全书算法册》欢迎指教,可在CSDN下载https://download.csdn.net/download/he_zhidan/88368465
展开
-
【C++二分查找】1870. 准时到达的列车最小时速
给你一个浮点数 hour ,表示你到达办公室可用的总通勤时间。要到达办公室,你必须按给定次序乘坐 n 趟列车。另给你一个长度为 n 的整数数组 dist ,其中 dist[i] 表示第 i 趟列车的行驶距离(单位是千米)。每趟列车均只能在整点发车,所以你可能需要在两趟列车之间等待一段时间。例如,第 1 趟列车需要 1.5 小时,那你必须再等待 0.5 小时,搭乘在第 2 小时发车的第 2 趟列车。返回能满足你准时到达办公室所要求全部列车的 最小正整数 时速(单位:千米每小时),如果无法准时到达,则返回原创 2024-08-13 17:00:00 · 407 阅读 · 0 评论 -
【C++二分查找】2226. 每个小孩最多能分到多少糖果
给你一个 下标从 0 开始 的整数数组 candies 。数组中的每个元素表示大小为 candies[i] 的一堆糖果。你可以将每堆糖果分成任意数量的 子堆 ,但 无法 再将两堆合并到一起。另给你一个整数 k 。你需要将这些糖果分配给 k 个小孩,使每个小孩分到 相同 数量的糖果。每个小孩可以拿走 至多一堆 糖果,有些糖果可能会不被分配。返回每个小孩可以拿走的 最大糖果数目 。原创 2024-08-13 08:27:14 · 477 阅读 · 4 评论 -
【C++二分查找 滑动窗口】2024. 考试的最大困扰度
一位老师正在出一场由 n 道判断题构成的考试,每道题的答案为 true (用 'T' 表示)或者 false (用 'F' 表示)。老师想增加学生对自己做出答案的不确定性,方法是 最大化 有 连续相同 结果的题数。(也就是连续出现 true 或者连续出现 false)。给你一个字符串 answerKey ,其中 answerKey[i] 是第 i 个问题的正确结果。除此以外,还给你一个整数 k ,表示你能进行以下操作的最多次数:每次操作中,将问题的正确答案改为 'T' 或者 'F' (也就是将 answ原创 2024-08-12 07:00:00 · 804 阅读 · 38 评论 -
【C++二分查找 决策包容性】1300. 转变数组后最接近目标值的数组和
给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。原创 2024-08-09 17:00:00 · 780 阅读 · 5 评论 -
【C++二分查找】2187. 完成旅途的最少时间
给你一个数组 time ,其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟旅途。每辆公交车 独立 运行,也就是说可以同时有多辆公交车在运行且互不影响。给你一个整数 totalTrips ,表示所有公交车 总共 需要完成的旅途数目。请你返回完成 至少 totalTrips 趟旅途需要花费的 最少 时间。原创 2024-08-09 07:00:00 · 947 阅读 · 3 评论 -
【二分查找】3143. 正方形中的最多点数
给你一个二维数组 points 和一个字符串 s ,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的 标签 。如果一个正方形的中心在 (0, 0) ,所有边都平行于坐标轴,且正方形内 不 存在标签相同的两个点,那么我们称这个正方形是 合法 的。请你返回 合法 正方形中可以包含的 最多 点数。注意:如果一个点位于正方形的边上或者在边以内,则认为该点位于正方形内。正方形的边长可以为零。原创 2024-08-08 07:00:00 · 1937 阅读 · 140 评论 -
【C++二分查找 树状数组】2424. 最长上传前缀
给你一个 n 个视频的上传序列,每个视频编号为 1 到 n 之间的 不同 数字,你需要依次将这些视频上传到服务器。请你实现一个数据结构,在上传的过程中计算 最长上传前缀 。如果 闭区间 1 到 i 之间的视频全部都已经被上传到服务器,那么我们称 i 是上传前缀。最长上传前缀指的是符合定义的 i 中的 最大值 。请你实现 LUPrefix 类:LUPrefix(int n) 初始化一个 n 个视频的流对象。void upload(int video) 上传 video 到服务器。int longes原创 2024-08-08 17:00:00 · 1427 阅读 · 0 评论 -
【C++BFS算法】2039. 网络空闲的时刻
给你一个有 n 个服务器的计算机网络,服务器编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示服务器 ui 和 vi 之间有一条信息线路,在 一秒 内它们之间可以传输 任意 数目的信息。再给你一个长度为 n 且下标从 0 开始的整数数组 patience 。题目保证所有服务器都是 相通 的,也就是说一个信息从任意服务器出发,都可以通过这些信息线路直接或间接地到达任何其他服务器。编号为 0 的服务器是 主 服务器,其他服务器为 数据 服原创 2024-08-07 07:00:00 · 740 阅读 · 10 评论 -
【C++BFS算法】2059. 转化数字的最小运算数
给你一个下标从 0 开始的整数数组 nums ,该数组由 互不相同 的数字组成。另给你两个整数 start 和 goal 。整数 x 的值最开始设为 start ,你打算执行一些运算使 x 转化为 goal 。你可以对数字 x 重复执行下述运算:如果 0原创 2024-08-06 17:00:00 · 980 阅读 · 0 评论 -
【C++BFS算法】2101. 引爆最多的炸弹
给你一个炸弹列表。一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆。炸弹用一个下标从 0 开始的二维整数数组 bombs 表示,其中 bombs[i] = [xi, yi, ri] 。xi 和 yi 表示第 i 个炸弹的 X 和 Y 坐标,ri 表示爆炸范围的 半径 。你需要选择引爆 一个 炸弹。当这个炸弹被引爆时,所有 在它爆炸范围内的炸弹都会被引爆,这些炸弹会进一步将它们爆炸范围内的其他炸弹引爆。给你数组 bombs ,请你返回在引爆 一个 炸弹的前提下,最多 能引爆的炸弹数目。原创 2024-08-06 07:00:00 · 1032 阅读 · 3 评论 -
【C++BFS算法】2998. 使 X 和 Y 相等的最少操作次数
给你两个正整数 x 和 y 。一次操作中,你可以执行以下四种操作之一:如果 x 是 11 的倍数,将 x 除以 11 。如果 x 是 5 的倍数,将 x 除以 5 。将 x 减 1 。将 x 加 1 。请你返回让 x 和 y 相等的 最少 操作次数。原创 2024-08-05 17:00:00 · 830 阅读 · 3 评论 -
【C++BFS算法】2146. 价格范围内最高排名的 K 样物品
给你一个下标从 0 开始的二维整数数组 grid ,它的大小为 m x n ,表示一个商店中物品的分布图。数组中的整数含义为:0 表示无法穿越的一堵墙。1 表示可以自由通过的一个空格子。所有其他正整数表示该格子内的一样物品的价格。你可以自由经过这些格子。从一个格子走到上下左右相邻格子花费 1 步。同时给你一个整数数组 pricing 和 start ,其中 pricing = [low, high] 且 start = [row, col] ,表示你开始位置为 (row, col) ,同时你只对物原创 2024-08-05 07:00:00 · 1540 阅读 · 127 评论 -
【C++BFS算法】1905. 统计子岛屿
给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地)。一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域。任何矩阵以外的区域都视为水域。如果 grid2 的一个岛屿,被 grid1 的一个岛屿 完全 包含,也就是说 grid2 中该岛屿的每一个格子都被 grid1 中同一个岛屿完全包含,那么我们称 grid2 中的这个岛屿为 子岛屿 。请你返回 grid2 中 子岛屿 的 数目 。原创 2024-08-03 17:00:00 · 1719 阅读 · 12 评论 -
【[C++BFS】1765. 地图中的最高点
给你一个大小为 m x n 的整数矩阵 isWater ,它代表了一个由 陆地 和 水域 单元格组成的地图。如果 isWater[i][j] == 0 ,格子 (i, j) 是一个 陆地 格子。如果 isWater[i][j] == 1 ,格子 (i, j) 是一个 水域 格子。你需要按照如下规则给每个单元格安排高度:每个格子的高度都必须是非负的。如果一个格子是 水域 ,那么它的高度必须为 0 。任意相邻的格子高度差 至多 为 1 。当两个格子在正东、南、西、北方向上相互紧挨着,就称它们为相邻的原创 2024-08-03 16:06:55 · 577 阅读 · 0 评论 -
【C++BFS算法 二分查找】1631. 最小体力消耗路径
你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。请你返回从左上角走到右下角的原创 2024-08-02 15:40:34 · 843 阅读 · 3 评论 -
【C++BFS】1466. 重新规划路线
n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。路线用 connections 表示,其中 connections[i] = [a, b] 表示从城市 a 到 b 的一条有向路线。今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。请你帮助重新规划路线方向,使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。题目数据 保证 每个原创 2024-08-02 07:00:00 · 653 阅读 · 3 评论 -
【C++BFS】1462. 课程表 IV
你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。有的课会有直接的先修课程,比如如果想上课程 1 ,你必须先上课程 0 ,那么会以 [0,1] 数对的形式给出先修课程数对。先决条件也可以是 间接 的。如果课程 a 是课程 b 的先决条件,课程 b 是课程 c 的先决条件,那么课程 a 就是课程 c原创 2024-08-01 17:00:00 · 952 阅读 · 2 评论 -
【C++BFS】1162. 地图分析
你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地。请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的,并返回该距离。如果网格上只有陆地或者海洋,请返回 -1。我们这里说的距离是「曼哈顿距离」( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个单元格之间的距离是 |x0 - x1| + |y0 - y1| 。原创 2024-07-31 17:00:00 · 845 阅读 · 3 评论 -
【C++BFS】1091. 二进制矩阵中的最短路径
给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:路径途经的所有单元格的值都是 0 。路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。畅通路径的长度 是该路径途经的单元格总数。原创 2024-07-31 07:00:00 · 1439 阅读 · 2 评论 -
【C++BFS】1020. 飞地的数量
给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。原创 2024-07-30 17:00:00 · 833 阅读 · 2 评论 -
【C++BFS】959. 由斜杠划分区域
在由 1 x 1 方格组成的 n x n 网格 grid 中,每个 1 x 1 方块由 '/'、'\' 或空格构成。这些字符会将方块划分为一些共边的区域。给定网格 grid 表示为一个字符串数组,返回 区域的数量 。请注意,反斜杠字符是转义的,因此 '\' 用 '\\' 表示。原创 2024-07-30 07:00:00 · 708 阅读 · 4 评论 -
【C++BFS算法】886. 可能的二分法
给定一组 n 人(编号为 1, 2, ..., n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。给定整数 n 和数组 dislikes ,其中 dislikes[i] = [ai, bi] ,表示不允许将编号为 ai 和 bi的人归入同一组。当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。原创 2024-07-29 17:00:00 · 1350 阅读 · 1 评论 -
【C++BFS算法 二分查找】2812. 找出最安全路径
给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid ,其中 (r, c) 表示:如果 grid[r][c] = 1 ,则表示一个存在小偷的单元格如果 grid[r][c] = 0 ,则表示一个空单元格你最开始位于单元格 (0, 0) 。在一步移动中,你可以移动到矩阵中的任一相邻单元格,包括存在小偷的单元格。矩阵中路径的 安全系数 定义为:从路径中任一单元格到矩阵中任一小偷所在单元格的 最小 曼哈顿距离。返回所有通向单元格 (n - 1, n - 1) 的路径中的 最大安全系数 。原创 2024-07-29 08:08:41 · 1532 阅读 · 160 评论 -
【C++BFS】743. 网络延迟时间
# 本文涉及知识点[C++BFS算法](https://blog.csdn.net/he_zhidan/article/details/133380813)[C++图论](https://blog.csdn.net/he_zhidan/article/details/136787189)# LeetCode743. 网络延迟时间有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,原创 2024-07-28 17:00:00 · 358 阅读 · 6 评论 -
【C++BFS算法】2192. 有向无环图中一个节点的所有祖先
求各节点的后代,BFS各节点的层次,层次不是-1,就是后代。求一个节点后代的时间复杂度:O(m) ,m = edges.length,总时间复杂度为:O(nm)。输入:n = 8, edgeList = [[0,3],[0,4],[1,3],[2,4],[2,7],[3,5],[3,6],[3,7],[4,6]]输出:[[],[],[],[0,1],[0,2],[0,1,3],[0,1,2,3,4],[0,1,2,3]]|闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。原创 2024-07-25 07:03:02 · 2475 阅读 · 169 评论 -
【C++BFS】1311. 获取你好友已观看的视频
有 n 个人,每个人都有一个 0 到 n-1 的唯一 id 。给你数组 watchedVideos 和 friends ,其中 watchedVideos[i] 和 friends[i] 分别表示 id = i 的人观看过的视频列表和他的好友列表。Level 1 的视频包含所有你好友观看过的视频,level 2 的视频包含所有你好友的好友观看过的视频,以此类推。一般的,Level 为 k 的视频包含所有从你出发,最短距离为 k 的好友观看过的视频。给定你的 id 和一个 level 值,请你找原创 2024-07-22 07:00:00 · 3974 阅读 · 154 评论 -
【C++BFS 回溯】756. 金字塔转换矩阵
你正在把积木堆成金字塔。每个块都有一个颜色,用一个字母表示。每一行的块比它下面的行 少一个块 ,并且居中。为了使金字塔美观,只有特定的 三角形图案 是允许的。一个三角形的图案由 两个块 和叠在上面的 单个块 组成。模式是以三个字母字符串的列表形式 allowed 给出的,其中模式的前两个字符分别表示左右底部块,第三个字符表示顶部块。例如,"ABC" 表示一个三角形图案,其中一个 “C” 块堆叠在一个 'A' 块(左)和一个 'B' 块(右)之上。请注意,这与 "BAC" 不同,"B" 在左下角,"A"原创 2024-07-18 07:00:00 · 2794 阅读 · 149 评论 -
【C++BFS算法】752 打开转盘锁
每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’。输入: deadends = [“8887”,“8889”,“8878”,“8898”,“8788”,“8988”,“7888”,“9888”], target = “8888”可能的移动序列为 “0000” -> “1000” -> “1100” -> “1200” -> “1201” -> “1202” -> “0202”。BFS的状态表示:能解锁的数字,用字符串表示。原创 2024-07-15 07:00:00 · 2446 阅读 · 11 评论 -
【C++BFS】690. 员工的重要性
你有一个保存员工信息的数据结构,它包含了员工唯一的 id ,重要度和直系下属的 id 。给定一个员工数组 employees,其中:employees[i].id 是第 i 个员工的 ID。employees[i].importance 是第 i 个员工的重要度。employees[i].subordinates 是第 i 名员工的直接下属的 ID 列表。给定一个整数 id 表示一个员工的 ID,返回这个员工和他所有下属的重要度的 总和。原创 2024-07-12 07:00:17 · 2129 阅读 · 52 评论 -
【调和级数】100321. 优质数对的总数 II
给你两个整数数组 nums1 和 nums2,长度分别为 n 和 m。同时给你一个正整数 k。如果 nums1[i] 可以被 nums2[j] * k 整除,则称数对 (i, j) 为 优质数对(0原创 2024-05-26 15:46:42 · 1265 阅读 · 17 评论 -
【深度优先搜索 图论】:2925在树上执行操作以后得到的最大分数
有一棵 n 个节点的无向树,节点编号为 0 到 n - 1 ,根节点编号为 0 。给你一个长度为 n - 1 的二维整数数组 edges 表示这棵树,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 有一条边。同时给你一个长度为 n 下标从 0 开始的整数数组 values ,其中 values[i] 表示第 i 个节点的值。一开始你的分数为 0 ,每次操作中,你将执行:选择节点 i 。将 values[i] 加入你的分数。将 values[i] 变为 0 。如果原创 2023-11-06 06:45:00 · 374 阅读 · 1 评论