自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 160.相交链表

本文探讨了判断两个链表是否相交的多种解法。暴力法通过双重循环比较节点地址,时间复杂度O(L_A*L_B);哈希法利用集合存储节点地址,时空复杂度均为O(L_A+L_B);倒序法通过存储节点后反向比较,时空复杂度同哈希法;长度差法先计算链表长度差再同步遍历,时间复杂度O(L_A+L_B),空间O(1);最优的双指针法让两个指针分别遍历两个链表后交换遍历,最终在交点相遇或返回nullptr,时间复杂度O(L_A+L_B),空间O(1)。各种方法在时空复杂度上呈现明显差异。

2025-12-16 23:18:28 324

原创 234.回文链表

摘要:本文提出了一种判断单链表是否为回文链表的方法。该方法使用快慢指针找到链表中间节点,反转后半部分链表,然后比较前半部分和反转后的后半部分是否相同。若全部匹配则返回true,否则返回false。最后可选择性地将链表恢复原状。算法时间复杂度为O(n),空间复杂度为O(1),能高效处理空链表或单节点链表的情况。

2025-11-23 23:53:54 138

原创 206.反正链表

这段代码实现了一个单链表的反转功能。算法使用三个指针:prev(指向前驱节点)、curr(当前节点)和next_temp(临时保存下一节点)。通过遍历链表,每次将当前节点的next指针指向前驱节点,然后移动指针位置。最终prev指针指向反转后的链表头节点。该算法的时间复杂度为O(n),空间复杂度为O(1),是一种高效且原地操作的反转链表方法。

2025-11-22 23:57:28 135

原创 160.相交链表

本文介绍了一种查找两个单链表相交节点的算法。通过使用两个指针分别遍历链表A和B,当指针到达链表末尾时切换到另一链表的头部继续遍历。如果链表相交,两个指针会在交点相遇;如果不相交,最终会同时变为NULL。该算法时间复杂度为O(m+n),空间复杂度为O(1),其中m和n分别是两个链表的长度。这种方法巧妙地利用了双指针遍历路径长度相等的特性,无需额外空间即可判断链表是否相交并找到交点。

2025-11-21 23:31:25 211

原创 240.搜索二维矩阵II

摘要:该算法针对行列均按升序排列的二维矩阵,提出了一种高效的Z字形搜索方法。从矩阵右上角开始,通过比较当前元素与目标值的大小,逐步排除整行或整列:若当前值大于目标则左移一列,小于目标则下移一行。该方法时间复杂度为O(m+n),其中m和n分别是矩阵的行数和列数,确保了在最优时间复杂度内完成搜索任务。

2025-11-20 23:48:53 318

原创 48.旋转图像

摘要:本文提出了一种原地旋转矩阵90度的方法,通过分解操作为转置加左右翻转实现。算法首先对矩阵进行转置操作(行列互换),随后对每一行进行左右翻转,最终完成顺时针90度旋转。该方法避免了额外空间的使用,时间复杂度为O(n²)。代码实现简洁高效,适用于任意大小的方阵。

2025-11-19 23:51:20 179

原创 54. 螺旋矩阵

本文介绍了一种按顺时针螺旋顺序遍历二维矩阵的方法。该方法采用分层模拟与边界收缩策略:通过维护四个边界指针(top,bottom,left,right),依次进行从左到右、从上到下、从右到左、从下到上的四次边界遍历。每次完成一圈后收缩相应边界,并检查边界条件避免重复遍历,直到所有元素被访问。时间复杂度为O(mn),空间复杂度为O(1)(不考虑输出空间)。该方法适用于任意m×n矩阵,能高效处理空矩阵和单行/单列等特殊情况。

2025-11-18 22:20:25 340

原创 73.矩阵置零

摘要:本文介绍了矩阵置零问题的两种解法。常规解法使用额外空间记录需置零的行列,时间复杂度和空间复杂度均为O(m+n)。最优解采用原地算法,利用矩阵首行和首列作为标记数组,仅需O(1)额外空间。通过设置is_col0_zero变量解决标记冲突,分三步实现:标记非首行首列的零元素,根据标记置零,最后处理首行首列。该算法在保证时间复杂度为O(mn)的同时,将空间复杂度降至O(1)。

2025-11-17 21:29:30 325

原创 41.缺失的第一个正数

思路给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。3范围 [1,2] 中的数字都在数组中。21 在数组中,但 2 没有。1最小的正数 1 没有出现。要找到最小的正整数,那我肯定先得知道nums中的最大正整数才行,不然我没有寻找的范围。之后我再用unordered_map把1到max的元素存起来,进行遍历如果出现过标记为1,最后把没标记的最小返回。

2025-11-16 14:44:42 836

原创 238. 除自身以外数组的乘积

乖乖,这个题目一看,好像没啥思路,既然是要优化,肯定得提前存储一些元素的乘积.通过不断测试,其实从左到右和从右到左把这些两个的乘积存起来即可。的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组。之中任意元素的全部前缀元素和后缀的乘积都在。之外其余各元素的乘积。时间复杂度内完成此题。空间复杂的O(1)的算法。

2025-11-15 17:22:38 225

原创 189.轮转数组

本文介绍了三种实现数组向右轮转k个位置的算法:1. 使用辅助数组法(时间复杂度O(n),空间复杂度O(n)),通过创建新数组直接复制元素。2. 环状替换法(时间复杂度O(n),空间复杂度O(1)),通过循环替换元素实现原地轮转。3. 反转数组法(时间复杂度O(n),空间复杂度O(1)),通过三次反转实现高效原地轮转,是最优解法。三种方法中,反转数组法既满足空间复杂度要求又具有最佳时间效率,是最推荐的解决方案。

2025-11-14 23:22:22 467

原创 56. 合并区间

本文介绍了一种合并重叠区间的方法。算法首先将区间按起始点排序,然后依次比较相邻区间:若前一区间的终点小于后一区间的起点,则作为独立区间保留;否则合并两区间(取较大终点)。通过遍历所有区间并实时更新当前合并区间的终点,最终得到不重叠的合并结果。该方法时间复杂度主要取决于排序步骤,为O(nlogn),空间复杂度为O(1)。示例展示了算法如何合并[[1,3],[2,6]]等区间的情况。

2025-11-13 22:30:26 197

原创 53. 最大子数组和

本文探讨了求解最大子数组和的三种算法。前缀和方法通过计算和比较前缀和来寻找最大子数组和,时间复杂度O(n)。动态规划方法(Kadane算法)以O(n)时间复杂度和O(1)空间复杂度高效求解,通过比较当前元素与前序子数组和来更新最大值。分治法采用递归策略,将问题分解为左、右子问题和跨越中点的子问题,时间复杂度O(nlogn)。三种方法各有特点:前缀和思路直观,动态规划效率最高,分治法展示了分治思想的典型应用。代码实现中需要注意边界条件和变量更新时机,以确保正确性。

2025-11-12 12:09:07 639

原创 76. 最小覆盖子串

摘要:该问题要求找出字符串s中包含字符串t所有字符的最短子串。解决方案采用滑动窗口算法,使用两个哈希表分别记录t的字符需求(target_map)和当前窗口内的字符统计(window_map)。通过双指针遍历s,当窗口满足t的字符需求时记录最小长度,并移动左指针缩小窗口。关键点在于使用match变量实时跟踪满足条件的字符数量,确保算法高效性。最终时间复杂度为O(m+n),适用于大规模字符串处理。

2025-11-11 22:44:53 339

原创 239.滑动窗口最大值

本文介绍了一种使用单调队列高效求解滑动窗口最大值问题的方法。给定数组nums和窗口大小k,通过维护一个存储索引的双端队列,保持队列中元素值单调递减。每次窗口滑动时,执行三个关键操作:移除队尾小于当前值的元素,添加新元素索引,检查并移除超出窗口的队头元素。该方法的时间复杂度为O(N),空间复杂度为O(K),是解决该问题的最优方案,相比暴力解法和优先队列具有显著优势。文章详细阐述了算法实现步骤,并通过均摊分析证明了其线性时间复杂度,为处理滑动窗口类问题提供了高效解决方案。

2025-11-10 13:57:47 607

原创 560. 和为K的子数组

本文探讨了解决数组中和为k的子数组个数统计问题的两种方法。对于全是正数的数组,可以使用滑动窗口技术,通过双指针动态调整窗口范围来计算符合条件的子数组。但当数组包含负数时,滑动窗口会失效,此时应采用前缀和结合哈希表的方法:预先计算前缀和,利用哈希表存储前缀和出现的次数,通过查找当前前缀和与目标值k的差值来统计符合条件的子数组个数。文章还对比了两种方法的适用场景,指出滑动窗口适用于单调性数据的最优化问题,而前缀和则适用于包含负数的精确值统计问题。两种方法各有所长,需根据具体问题特性选择合适解法。

2025-11-09 10:39:40 323

原创 438.找到字符串中所有字母异位词

此外,怎么遍历`s`, 第一种,想当然就是从`s`的index=0开始,每一次取len(p)个连续的子串`s`判断,这样的话,其实是双层循环了,那么最终的时间复杂度为O(n_2), 对于题目s,p <= 3*10^4,勉强符合。上面这个方法(对了,其实我当时没考虑一种极端情况p的长度大于了s,还有就是i<=s.length() - p.length()写成了i<s.length() - p.length(),害,漏了这两个边界,没有思考情况,其实这个边界是可以取到的),发现只有一个样例没过了,导致超时了。

2025-11-08 12:33:32 292

原创 3无重复字符的最长子串

滑动窗口适用于处理连续子数组或连续子串的问题,特别是在需要在窗口内动态维护状态的情况下。它通过两个指针(左指针和右指针)来管理一个滑动的区间,在扩展右指针和收缩左指针的过程中逐步求解问题。滑动窗口的核心特征是通过有效调整区间范围来避免重复计算,从而提高算法效率,通常将时间复杂度降到 O(n) 的水平。

2025-10-17 18:16:46 646

原创 git的使用文档

【代码】git的使用文档。

2023-10-15 22:43:26 152 1

原创 209长度最小的子数组

并返回其长度**。**如果不存在符合条件的子数组,返回。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。

2023-10-15 22:41:33 144 1

原创 有序数组的平方

给你一个按排序的整数数组nums,返回组成的新数组,要求也按排序。

2023-10-14 23:19:49 132 1

原创 快慢指针系列题目

用两个指针,一个每次前进两步,一个每次前进一步。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。

2023-10-13 23:21:17 100

原创 二分查找模板

目前常见的二分题目都可以用上述模板进行解决!!!

2023-10-12 20:50:25 97

原创 leetcode-704题解

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

2023-10-12 20:49:14 110

原创 VMWARE安装VM TOOLS后依旧无法拖拉文件的解决方法和安装/重新安装MVtools的图标为灰色

如果出现上面这个问题,一般也会有这个问题,虚拟机中的安装/重新安装MVtools的图标为灰色。

2023-10-10 19:14:53 2269 1

原创 # VMware Tools安装教程(手动下载,不使用VM自带tools安装包)

如果大家VM虚拟机中和我一样,无法通过软件VMware自带的安装。### 第一步,打开虚拟机中Linux终端。

2023-10-10 18:38:02 1464 1

转载 python split()函数的使用

pyhton基础

2022-09-21 17:07:00 330

原创 python map函数的使用

python基础

2022-09-21 16:58:40 232

转载 蓝桥杯基础-python datetime模块的使用

第一次发博客,蓝桥杯刚入门,遇到新知识就记录

2022-09-21 16:29:46 826

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除