- 博客(62)
- 收藏
- 关注
原创 C++八股 | Day6 | 构造函数 / 析构函数 / 虚函数 / 虚函数表 / 纯虚函数 / 虚析构函数
本文摘要: C++中构造函数与析构函数是类的特殊成员函数。构造函数用于初始化对象,分为默认构造函数、带参构造函数、拷贝构造函数和委托构造函数四种类型。析构函数用于对象销毁时的资源清理,以~开头且无参数。虚函数是实现多态的关键机制,通过virtual关键字声明,允许派生类重写基类函数。虚函数表(vtable)是支持虚函数的底层机制,每个类拥有自己的vtable存储虚函数指针,对象通过虚表指针(vptr)访问正确的函数实现。当基类指针指向派生类对象时,通过vptr找到派生类的vtable,实现运行时的多态调用。
2025-06-23 00:22:11
864
原创 设计模式 | 单例模式——饿汉模式 & 懒汉模式
文章摘要: 单例模式分为饿汉和懒汉两种实现方式。饿汉模式在类加载时就创建实例,具有线程安全特性但可能浪费资源;懒汉模式在首次调用时创建实例,节省资源但需额外处理线程安全问题。C++实现中,饿汉模式通过类外静态成员初始化访问私有构造函数,而懒汉模式需注意多线程下的双重检查锁定。两者各有优劣:饿汉简单稳定适合高频使用场景,懒汉灵活节约资源但实现较复杂,开发者应根据具体需求选择合适方案,尤其注意线程安全问题。(150字)
2025-06-19 08:27:04
1573
原创 网络库 muduo-core | 系统框架
Muduo-core网络库采用多Reactor模式实现高性能网络编程。其核心架构分成主从Reactor两级:主Reactor负责监听和建立连接(处理listenfd的EPOLLIN事件),从Reactor处理数据传输(处理connfd的读写事件)。采用"One Loop Per Thread"线程模型,每个EventLoop绑定专属线程,通过轮询策略分配连接。关键技术包括非阻塞I/O、epoll多路复用、无锁设计等,实现了高并发、低延迟的网络服务。相比传统多线程模型,该设计减少了线程切换
2025-06-16 03:25:09
1132
原创 TCP/IP 网络编程 | Reactor事件处理模式
Reactor模式是一种基于事件驱动的高效网络编程模型,其核心思想是将IO事件检测与处理分离,通过单线程非阻塞IO实现高并发。主要包含三大组件:Reactor(事件循环)、Handler(事件处理器)和同步事件分离器(如epoll)。与多线程模型相比,Reactor模式具有内存消耗低、上下文切换少等优势。通过epoll实现底层IO监听,支持ET/LT两种触发模式,ET模式性能更高但编程复杂。典型实现包括事件循环主线程监听fd、Acceptor处理新连接、IOHandler处理读写操作,形成完整的事件处理流程
2025-06-12 23:42:42
1011
原创 C++八股 | Day5 | 一篇文章讲清:面向对象—封装、继承、多态 / 多重继承—菱形继承、虚继承 / 重载vs重写 / 虚函数表 / 多态的实现_含具体代码
C++面向对象编程的三大特性包括封装、继承和多态。封装通过访问控制(public/protected/private)保护数据安全;继承允许子类复用父类代码,支持公有、保护和私有三种继承方式;多态分为编译时多态(函数重载)和运行时多态(虚函数覆盖)。多重继承则让一个类可以同时继承多个父类。这些特性共同构成了C++面向对象编程的核心思想,实现了代码重用、模块化和灵活性。
2025-06-12 11:00:06
1063
原创 TCP/IP 网络编程 | IO多路复用select/poll/epoll
I/O多路复用机制概述 本文介绍了三种I/O多路复用技术:select、poll和epoll。I/O多路复用允许单个线程同时监听多个文件描述符,当有文件描述符准备好I/O操作时通知应用程序。 核心内容: select机制:使用三个位图(fd_set)监听可读、可写和异常事件,存在效率问题和文件描述符数量限制(1024) poll机制:改进select,使用pollfd结构体数组,解决了文件描述符数量限制问题 epoll机制:Linux专有高效实现,使用事件驱动模型,适合高并发场景 文中提供了select实现
2025-06-11 05:24:04
1093
原创 C++八股 | Day4 | 乱序执行 / 信号量 & 示例代码 / future库 & 示例代码
本篇简要整理了现代 C++ 多线程中的三个重要概念:乱序执行(Reordering)、信号量(Semaphore)、future/promise 异步通信,它们是理解线程同步、资源管理、结果传递的核心工具。
2025-06-10 09:24:50
834
原创 TCP/IP 网络编程 | 服务端 & 客户端的封装
本文介绍了基于C++的Socket网络编程实现,包括服务器端和客户端的封装设计。主要展示了socket.h接口定义、socket.cpp实现细节,以及server.cpp和client.cpp的使用示例。服务器端持续监听8888端口并处理客户端请求,实现简单的echo功能;客户端通过连接服务器并发送消息完成交互。文章还说明了程序的退出方式和预期终端输出效果。该设计采用面向对象方式封装底层Socket操作,简化了网络通信开发流程。
2025-06-09 10:06:14
412
原创 C++八股 | Day3 | 智能指针 / 内存管理 / 内存分区 / 内存对齐
定义:内存泄漏是指程序在申请内存后,由于程序设计上的疏忽或错误,忘记释放这块内存,导致这段内存一直被占用但再也不会被使用。本质:不是内存本身丢失,而是程序对这段内存的控制权丢失了,结果就是这块内存无法再使用,造成了浪费。检测工具:常用的内存泄漏检测工具包括:Valgrind、mtrace 等。野指针指的是:指向一块已经释放或者无效的内存地址的指针。
2025-06-08 09:44:09
1061
原创 C++八股 | Day2 | atom/函数指针/指针函数/struct、Class/静态局部变量、局部变量、全局变量/强制类型转换
类型作用域生命周期特点/用途局部变量代码块/函数每次进入创建,退出销毁最小作用域,不占资源静态局部变量函数/块内程序整个生命周期记住状态,但只能内部访问全局变量所有文件/函数程序整个生命周期所有函数共享数据,但耦合度高。
2025-06-05 09:21:52
1075
原创 C++八股 | Day1 | 一篇带你搞清楚C++各类关键字和指针——static / const / constexpr / define / typedf / inline / volatile
预处理器简单地进行字符串替换,没有类型检查,不安全。适用于。
2025-06-03 09:26:56
988
原创 Leetcode刷题 | Day67_图论12_Floyd算法 / A*算法
我们在搜索最短路的时候, 如果是无权图(边的权值都是1) 那就用广搜,代码简洁,时间效率和 dijkstra 差不多 (具体要取决于图的稠密)接下来的 n 行,每行包含四个整数 a1, a2, b1, b2,分别表示骑士的起始位置 (a1, a2) 和目标位置 (b1, b2)。小明喜欢去公园散步,公园内布置了许多的景点,相互之间通过小路连接,小明希望在观看景点的同时,能够节省体力,走最短的路径。起点达到目前遍历节点的距离 + 目前遍历的节点到达终点的距离 就是起点到达终点的距离。
2025-05-25 08:11:20
1346
原创 Leetcode刷题 | Day66_图论11_BellmanFord算法02
输出一个整数,表示从城市 src 到城市 dst 的最低运输成本,如果无法在给定经过城市数量限制下找到从 src 到 dst 的路径,则输出 "unreachable",表示不存在符合条件的运输方案。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。如果发现了负权回路的存在,则输出 "circle"。
2025-05-23 07:25:58
670
原创 Leetcode刷题 | Day65_图论10_BellmanFord算法01
那对所有边松弛三次 可以得到与起点 三条边相连的节点的最短距离,这个时候,我们就能得到到达节点3真正的最短距离,也就是 节点1 -> 节点2 -> 节点5 -> 节点3 这条路线。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。那么无论图是什么样的,边是什么样的顺序,我们对所有边松弛 n-1 次 就一定能得到 起点到达 终点的最短距离。网络中的道路都有各自的运输成本和政府补贴,道路的权值计算方式为:运输成本 - 政府补贴。
2025-05-23 05:56:12
1098
原创 Leetcode刷题 | Day64_图论09_dijkstra算法
然而,途中的各个车站之间的道路状况、交通拥堵程度以及可能的自然因素(如天气变化)等不同,这些因素都会影响每条路径的通行时间。接下来为 M 行,每行包括三个整数,S、E 和 V,代表了从 S 车站可以单向直达 E 车站,并且需要花费 V 单位的时间。接下来为 M 行,每行包括三个整数,S、E 和 V,代表了从 S 车站可以单向直达 E 车站,并且需要花费 V 单位的时间。本题就是求最短路,最短路是图论中的经典问题即:给出一个有向图,一个起点,一个终点,问起点到终点的最短路径。
2025-05-16 07:54:39
933
原创 Leetcode刷题 | Day63_图论08_拓扑排序
某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果文件 A 依赖于文件 B,则必须在处理文件 A 之前处理文件 B (0 <= A, B <= N - 1)。请编写一个算法,用于确定文件处理的顺序。第一行输入两个正整数 N, M。后续 M 行,每行两个正整数 S 和 T,表示 T 文件依赖于 S 文件。结果集的顺序,就是我们想要的拓扑排序顺序 (结果集里顺序可能不唯一)输出共一行,如果能处理成功,则输出文件顺序,用空格隔开。
2025-05-16 00:00:17
723
原创 Leetcode刷题 | Day61_图论07
在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。顶点编号是从1到V。不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将所有岛屿联通起来。不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将所有岛屿联通起来。接下来共有E行,每行三个整数v1,v2和val,v1和v2为边的起点和终点,val代表边的权值。接下来共有E行,每行三个整数v1,v2和val,v1和v2为边的起点和终点,val代表边的权值。
2025-05-15 22:14:16
708
原创 Leetcode刷题 | Day60_图论06
输入一个有向图,该图由一个有着 n 个节点(节点编号 从 1 到 n),n 条边,请返回一条可以删除的边,使得删除该条边之后该有向图可以被当作一颗有向树。那么我们就可以从前向后遍历每一条边(因为优先让前面的边连上),边的两个节点如果不在同一个集合,就加入集合(即:同一个根节点)。现在在这棵树上的基础上,添加一条边(依然是n个节点,但有n条边),使这个图变成了有环图,如图。输出一条可以删除的边,若有多条边可以删除,请输出标准输入中最后出现的一条边。先请你找出冗余边,删除后,使该图可以重新变成一棵树。
2025-05-15 00:44:15
1272
原创 Leetcode刷题 | Day59_图论05
如果存在,输出 1;判断两个节点是否在同一个集合,函数:isSame(int u, int v),就是判断两个节点是不是同一个根节点。将两个节点接入到同一个集合,函数:join(int u, int v),将两个节点连在同一个根节点上。后续 M 行,每行两个正整数 s 和 t,代表从节点 s 与节点 t 之间有一条边。寻找根节点,函数:find(int u),也就是判断这个节点的祖先节点是哪个。第一行包含两个正整数 N 和 M,N 代表节点的个数,M 代表边的个数。并查集是无向图,主要考察是否连通。
2025-05-14 10:22:46
390
原创 Leetcode刷题 | Day58_图论04
给定一个有向图,包含 N 个节点,节点编号分别为 1,2,...,N。现从 1 号节点开始,如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。在搜索的过程中,我们可以枚举,用26个字母替换当前字符串的每一个字符,在看替换后 是否在 strList里出现过,就可以判断 两个字符串 是否是链接的。然后就是求起点和终点的最短路径长度,在无权图中,求最短路,用深搜或者广搜就行,没必要用最短路算法。如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。
2025-05-14 06:46:43
794
原创 Leetcode刷题 | Day51_图论03_岛屿问题02
第二步:再遍历地图,遍历0的方格(因为要将0变成1),并统计该1(由0变成的1)周边岛屿面积,将其相邻面积相加在一起,遍历所有 0 之后,就可以得出 选一个0变成1 之后的最大面积。给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。给定一个由 1(陆地)和 0(水)组成的矩阵,你最多可以将矩阵中的一格水变为一块陆地,在执行了此操作之后,矩阵中最大的岛屿面积是多少。
2025-04-30 04:33:10
945
原创 Leetcode刷题 | Day50_图论02_岛屿问题01_dfs两种方法+bfs一种方法
给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。dfs函数中,连接的节点被判断为未访问的岛屿后,再对其visited数组值设为true,再dfs处理连接的节点。版本一dfs:dfs处理当前节点的相邻节点,即主函数遇到岛屿就计数为1,dfs处理接下来的相邻陆地。版本二dfs:dfs处理当前节点,即主函数遇到岛屿就计数为0,dfs处理接下来的全部陆地。现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。
2025-04-29 06:18:33
1255
原创 Leetcode刷题 | Day49_图论01
给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个程序,找出并返回所有从节点 1 到节点 n 的路径。输出所有的可达路径,路径中所有节点的后面跟一个空格,每条路径独占一行,存在多条路径,路径输出的顺序可任意。后续 M 行,每行包含两个整数 s 和 t,表示图中的 s 节点与 t 节点中有一条路径。是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点。第一行包含两个整数 N,M,表示图中拥有 N 个节点,M 条边。,请你找出所有从节点 0 到节点 n-1 的路径并输出(
2025-04-28 09:17:37
676
原创 Leetcode刷题 | Day48_单调栈
数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
2025-04-27 08:02:27
829
原创 Leetcode刷题 | Day45_动态规划12
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e')示例 2:输入:word1 = "intention", word2 = "executio
2025-04-25 09:42:17
958
原创 Leetcode刷题 | Day44_动态规划11
(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"输入:s = "abc", t = "ahbgdc"输入:s = "axc", t = "ahbgdc"输入: "sea", "eat"还可以使用贪心算法。
2025-04-24 08:54:51
680
原创 Leetcode刷题 | Day43_动态规划10
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。解释:最长连续递增序列是 [1,3,5], 长度为3。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。
2025-04-23 07:08:19
999
原创 Leetcode刷题 | Day42_动态规划09_买卖股票的最佳时机_特殊情况
保持卖出股票状态(状态二),如果i为1,第1天买入股票,那么递归公式中需要计算 dp[i - 1][1] - prices[i] ,即 dp[0][1] - prices[1],dp[0][1] (即第0天的状态二)只能初始为0。今天卖出了股票(状态三),同上分析,dp[0][2]初始化为0,dp[0][3]也初始为0。如果是持有股票状态(状态一)那么:dp[0][0] = -prices[0],一定是当天买入股票。操作一:前一天就是持有股票状态(状态一),dp[i][0] = dp[i - 1][0]
2025-04-22 08:27:20
1086
原创 Leetcode刷题 | Day41_动态规划08_买卖股票的最佳时机
输出:6 解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。同时,你不能在买入前卖出股票。那么第i天持有股票即dp[i][0],如果是第i天买入股票,所得现金就是昨天不持有股票的所得现金 减去 今天的股票价格 即:dp[i - 1][1] - prices[i]。
2025-04-21 09:01:39
1114
原创 Leetcode刷题 | Day39_动态规划07_打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。提示:2.213打家劫舍II213. 打家劫舍 II - 力扣(LeetCode
2025-04-21 05:36:02
1069
原创 Leetcode刷题 | Day38_动态规划06
在这个行星上,有许多不同类型的矿石资源,每种矿石都有不同的重要性和价值。"apple", "pen" 是物品,那么我们要求 物品的组合一定是 "apple" + "pen" + "apple" 才能组成 "applepenapple"。"apple" + "apple" + "pen" 或者 "pen" + "apple" + "apple" 是不可以的,那么我们就是强调物品之间顺序。这样的检查,因为在完全平方数问题中,我们确信任何数都可以表示为完全平方数的和(最差情况是全部用1来表示),所以。
2025-04-20 08:40:15
866
原创 Leetcode刷题 | Day37_动态规划05
完全背包递推公式只需要用到左边和正上方的值,一个是左侧本行更新后(放入i的)新数据,另一个是上一行的旧数据,压缩为一维滚动数组,拷贝后不仅需要本位置的值,还需要左侧更新的新值,所以必须正序遍历。所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1)小明的行李箱所能承担的总重量是有限的,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料可以选择无数次,并且可以重复选择。给定不同面额的硬币和一个总金额。
2025-04-20 06:36:22
995
原创 Leetcode刷题 | Day36_动态规划04
1049. 最后一块石头的重量 II - 力扣(LeetCode)有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]
2025-04-17 00:34:02
1022
原创 Leetcode刷题 | Day35_动态规划03__01背包详解,相信你看了一定有所收获
一维 dp 利用“倒序遍历”+“一行全初始化为 0”,不需要手动处理初始状态;但二维 dp 需要你准备好初始行(通常是dp[0][j]),因为递推从上一行开始。int n = 0;// bagweight代表行李箱空间// 存储每件物品所占空间// 存储每件物品价值i < n;j++) {// dp数组, dp[j]代表行李箱空间为j的情况下,能达到的最大价值,初始值为0// 物品0在循环第一轮处理// 外层循环遍历每个类型的研究材料i < n;
2025-04-16 05:38:52
808
原创 Leetcode刷题 | Day34_动态规划02
所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。
2025-04-14 07:57:24
1123
原创 Leetcode刷题 | Day32_动态规划01
也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)。选最小的,所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。请你找出达到楼层顶部的最低花费。
2025-04-12 23:28:30
594
原创 Leetcode刷题 | Day31_贪心算法05
从前向后遍历的话,遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能又小于strNum[i - 2]。输入: intervals = [[1,3],[2,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入: intervals = [[1,4],[4,5]]输出: [[1,6],[8,10],[15,18]]输出: [[1,5]]
2025-04-12 05:33:10
1073
原创 Leetcode刷题 | Day30_贪心算法04
非常像,弓箭的数量就相当于是非交叉区间的数量,只要把弓箭那道题目代码里射爆气球的判断条件加个等号(认为[0,1][1,2]不是相邻区间),然后用总区间数减去弓箭数量 就是要移除的区间数量了。解释:对于该样例,x = 6 可以射爆 [2,8],[1,6] 两个气球,以及 x = 11 射爆另外两个气球。输入:points = [[10,16],[2,8],[1,6],[7,12]]输入: [ [1,2], [2,3], [3,4], [1,3] ]输入: [ [1,2], [1,2], [1,2] ]
2025-04-11 05:21:01
818
原创 Leetcode刷题 | Day29_贪心算法03
回归本题,整个插入过程如下:排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]]
2025-04-10 06:19:39
617
原创 Leetcode刷题 | Day28_贪心算法02
举例: nums = [2, 3, 1, 1, 4]i = 0;现在还没跳,当前活动范围就是起始点i = 0,满足i = cur,所以马上需要跳,ans++,这一跳的范围最远到i = 2, cur = 2, next没有大于结束点,循环继续。i =1,开始在第一跳(ans = 1)的范围里面迭代,即从[0,cur = 2]范围内把每个可能的起跳点可到的最大距离计算一下,next = 1 + 3 = 4。
2025-04-09 09:11:53
585
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅