- 博客(79)
- 收藏
- 关注
原创 36 二叉树中序遍历
给定一个二叉树的根节点root,返回它的遍历。[1,3,2]root = [][]root = [1][1][0, 100]递归算法很简单,你可以通过迭代算法完成吗?
2026-09-25 17:00:25
164
原创 LRU缓存设计与实现
答:哈希表提供 O(1) 的 key 定位,双向链表在持有节点指针的前提下提供 O(1) 的删除和插入。两个操作合起来,get和put都是常数时间。
2026-09-25 15:28:11
92
原创 C++ 异常处理完全指南
public:要点优先继承,而不是裸(自动获得what()构造函数explicit,避免隐式转换// 全局异常基类,所有项目异常都派生自它public:顶层maintry {return 1;return 1;C++ 异常是一套完整但昂贵语法层+ 类型匹配 + 重新抛出机制层:栈展开 + RAII + 两阶段 unwind(Phase1 搜索 / Phase2 清理)实现层:Itanium ABI 表驱动(零成本)与 Windows SEH 双体系工程层。
2026-09-22 00:29:20
225
原创 34 合并K个升序链表
请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。将它们合并到一个有序链表中得到。
2026-09-13 13:51:20
76
原创 33 链表排序
给你链表的头结点head,请将其按排列并返回。[1,2,3,4]head = [][]你可以在O(n log n)时间复杂度和常数级空间复杂度下,对链表进行排序吗?
2026-09-13 13:10:42
224
原创 32 随机链表的复制
给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。例如,如果原链表中有X和Y两个节点,其中。那么在复制链表中对应的两个节点x和y,同样有。返回复制链表的头节点。用一个由n个节点组成的链表来表示输入/输出中的链表。
2026-08-31 22:12:05
228
原创 linux操作系统概述
操作系统,简称OS(Operation System),是介于计算机硬件与应用程序之间的一层核心系统软件。操作系统负责管理计算机的所有硬件资源,包括CPU、内存、硬盘、网卡等,并负责将它们合理、高效、公平地分配给不同的应用程序,防止它们之间互相冲突。管理与抽象。
2026-08-29 17:38:24
203
原创 RDB持久化功能详解
RDB(Redis Database)是一种二进制格式的快照持久化方案,将内存数据库在某一时刻的完整状态保存到磁盘文件中。相比AOF(Append Only File),RDB文件更紧凑、恢复速度更快,特别适合做备份和灾难恢复。特性说明二进制格式紧凑高效,可跨版本兼容全量快照保存某一时刻的完整数据状态快速恢复直接加载二进制文件,无需重放命令后台保存通过fork()实现,不阻塞主进程文件紧凑相比AOF文件更小。
2026-08-22 14:53:15
185
原创 31 k个一组翻转链表
给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5]链表中的节点数目为你可以设计一个只用O(1)额外内存空间的算法解决此问题吗?
2026-08-22 11:18:52
157
原创 30 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2026-08-22 11:14:12
202
原创 26 环形链表II
给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(如果pos是-1,则在该链表中没有环。pos,仅仅是为了标识链表的实际情况。链表。返回索引为 1 的链表节点链表中有一个环,其尾部连接到第二个节点。返回索引为 0 的链表节点链表中有一个环,其尾部连接到第一个节点。返回 null链表中没有环。
2026-08-15 17:58:05
139
原创 25 环形链表
给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。pos。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true。否则,返回false。true链表中有一个环,其尾部连接到第二个节点。true链表中有一个环,其尾部连接到第一个节点。false链表中没有环。-1你能用O(1)(即,常量)内存解决此问题吗?
2026-08-15 16:58:36
132
原创 24 回文链表
给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。truefalse[1, 105]你能否用O(n)时间复杂度和O(1)空间复杂度解决此题?给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。truefalse[1, 105]你能否用O(n)时间复杂度和O(1)空间复杂度解决此题?
2026-08-15 16:25:28
208
原创 23 翻转链表
给你单链表的头节点head,请你反转链表,并返回反转后的链表。[2,1]head = [][]链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
2026-08-15 16:01:44
221
原创 20 旋转图像
给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。
2026-08-09 19:49:17
211
原创 19 螺旋矩阵
给你一个m行n列的矩阵matrix,请按照,返回矩阵中的所有元素。1、检查参数的合法性2、从头开始循环,遇到边界就转弯3、可以用额外的空间做标记,标记是否走过这个位置。4、标记一个当前行和当前列,以及上下左右的边界5、初始时当前行为0,当前列为0,上边界top是0,下边界bottom是m-1,左边界left是0,右边界right是n-16、开始循环往右循环,到右边界之后,转向下。当前行+1,当前列走到最后一列,上边界往下走一格。7、从上往下循环,一直走到底部。
2026-08-09 19:45:33
189
原创 18 矩阵置0
给定一个m x n的矩阵,如果一个元素为,则将其所在行和列的所有元素都设为。请使用算法O(mn)O(m + n)1、先判断一下参数是否合法2、创建一个vector<pair<int,int> > line用于存放数字为0的行和列3、循环一遍矩阵,记录零的个数,并将行和列存放在line中4、循环line数组,将里面的行和列取出,将对应的行列置0;
2026-08-09 19:41:41
199
原创 链表的基本原理和实现(C++版本)
/ C++版本(模板化)智能指针版本private:T data;public:// ... 插入、删除、查找等方法公开接口层面:提供了完整的操作方法集,包括:插入操作:push_front(头插)、push_back(尾插)、insert_at(指定位置插入)删除操作:pop_front(头删)、pop_back(尾删)、erase_at(指定位置删除)、clear(清空)访问操作:operator[](随机访问)、size()(获取长度)
2026-08-09 17:59:06
187
原创 17 缺失的第一个正数
给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。3范围 [1,2] 中的数字都在数组中。21 在数组中,但 2 没有。1最小的正数 1 没有出现。
2026-08-08 14:36:36
176
原创 16 除了自身以外数组的乘积
给你一个整数数组nums,返回 数组answer,其中answer[i]等于nums中除了nums[i]之外其余各元素的乘积。题目数据数组nums之中任意元素的全部前缀元素和后缀的乘积都在整数范围内。请且在O(n)时间复杂度内完成此题。输入: nums = [1,2,3,4]输出: [24,12,8,6]输入: nums = [-1,1,0,-3,3]输出: [0,0,9,0,0]输入数组answer[i]在整数范围内你可以在O(1)的额外空间复杂度内完成这个题目吗?
2026-08-08 10:16:00
175
原创 15 轮转数组
给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。向右轮转 1 步:向右轮转 2 步:向右轮转 3 步:向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]O(1)
2026-08-08 10:01:10
227
原创 12 最小覆盖子串
1、创建两个哈希表,将t的字符作为键,每个字符出现的次数作为值unordered_map<char,int> ,一个用于存放t的字符,一个用于动态更新s的字符。3、判断s字符串的哈希表是否全部包含t字符串的哈希表,如果包含那就持续收缩左边界的窗口,判断最小长度包含t字符串哈希表的字符串。最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。2、将t的字符存入哈希表,循环s字符串建立滑动窗口,加入哈希表中。1、循环s字符串判断前,遇到在的字符在t字符串中不包含时直接跳过。
2026-08-02 11:13:47
201
原创 14 合并区间
示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2:输入:intervals = [[1,4],[4,5]] 输出:[[1,5]] 解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
2026-08-02 10:25:40
238
原创 13 最大子数组和
定义一个左指针和右指针,左指针指向窗口开始的位置,右指针指向窗口结束的位置。1、核心思想就是定义窗口累加,如果当前累加值是负数,那么累加清零(),窗口从下一个数开始,从下一个数开始累加。3、进入循环,将右指针加入窗口,计算窗口和,对比窗口和与NumMax谁更大,NumMax记住最大的值。6、假如当前窗口和加上下一个数字更大,那么right继续往前走,计算窗口和。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。
2026-08-01 12:42:04
241
原创 11 滑动窗口最大值
1、创建一个大小为k的大顶堆,用pair<int,int>构建元素,第一个是数组的值,第二个是数组的下标。创建两个指针,left=0、right=k-1,把指针中间的数字先加入大顶堆,创建临时的vector用于存放最大值。2、从堆顶拿一个元素,判断这个元素的下标是否是在left和right之间的,是则将元素放入答案中,否则将这个堆顶元素删除,继续获取堆顶元素,循环判断。的滑动窗口从数组的最左侧移动到数组的最右侧。3、循环结束条件right要大于数组的下标时,结束循环。不支持随机访问,所以不行)。
2026-07-25 16:05:17
173
原创 10 和为k的子数组
给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。22滑动窗口1、检查参数的合法性2、循环数组nums,从0到nums.size()-1,记下标为i,定义满足次数的变量_count=0。3、循环下标i到0的累加和,nums[i]+nums[i-1]、nums[i]+nums[i-1]+nums[i-2]....... nums[i+nums[i-1]+nums[i-2]+nums[0]。判断累加和是否有满足和等于k的。
2026-07-25 14:00:09
235
原创 kv存储主从复制的设计与实现
为了维持一致,命令传播机制会像一个单向的管道,将主节点上执行的、会改变数据的命令,持续不断地发送给所有已连接的从节点。此时,主节点会主动从积压缓冲区中找到这些缺失的命令,并重新发送给从节点,从而保证了数据的最终一致性。为了应对从节点可能发生的短暂断线,Redis 在命令传播的同时,会将所有写命令也写入一个由主节点维护的 复制积压缓冲区(Replication Backlog) 中。的,这意味着主节点在执行完写命令后立即返回客户端结果,无需等待从节点确认,这保证了主节点的高性能。
2026-07-25 13:47:05
337
原创 9 找到字符串中所有字母异位词
给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。[0,6]起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。[0,1,2]起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。p。
2026-07-22 23:26:54
207
原创 8 无重复字符的最长子串
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。6、在hash表中从左指针到pos的位置的元素删除(或者使用墓碑标记),修改该key值的value=pos,左指针指向pos的位置,右指针继续向前right++,直到右指针指向数组的末尾。4、开始循环右指针往前走,每遇到一个元素查询一下hash中是否有重复的元素,假如没有就往hash中插入一个元素,key为数组的值,value为元素的下标。记录此时hash的长度和len_max比较谁更大,用len_max记录下来。
2026-07-22 23:03:05
227
原创 7 接雨水
2、每一格中能装多少水取决于他左边最高的格子和右边最高的格子,假设为left和right。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。3、循环找到数组中每一格的len,先创建一个存放左边最高格子的数组,再创建一个右边最高格子的数组。4、计算每一格的储水量,value=len-本身格子的高度,然后所有容量相加。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。1、判断参数的合法性。
2026-07-20 13:30:10
135
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅