自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Leetcode刷题随笔】541.反转字符串II

本题要求每隔2k个字符反转前k个字符。解题关键在于每次循环移动2k距离,然后处理三种情况:剩余字符≥k时反转前k个;剩余<k时全部反转;2k范围内处理前k个。使用C语言实现,通过reverse函数交换字符,主函数循环移动2k步长进行区间处理。这种方法避免了复杂计数,直接通过步长跳跃和区间判断简洁解决问题。时间复杂度O(n),空间复杂度O(1)。

2025-07-15 10:32:55 233

原创 【Leetcode刷题随笔】344.反转字符串

很简单的题,调用库函数直接一行都可以解决。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]

2025-07-15 09:50:10 288

原创 【Leetcode刷题随笔 454.四数相加II】

注意:所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1。给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。这是使用哈希法的经典题目,通过。

2025-07-08 10:21:23 198

原创 【Leetcode刷题随笔】01. 两数之和

文章摘要:本文分析了LeetCode两数之和问题的两种解法。第一种是双层循环暴力解法,第二种哈希表解法

2025-06-23 14:15:43 762

原创 【Leetcode刷题随笔】202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true;不是,则返回 false。

2025-05-13 11:46:08 401

原创 【Leetcode刷题随笔】349. 两个数组的交集

而不仅仅是0到1000之间的数,这样更灵活。原来的方法有潜在越界风险,哈希表能解决这个问题。但同时,带来了一定的复杂度,这一部分用C++中的unorder_set来实现,如果用C语言则需要导入第三方库(如 uthash),因为C语言没有原生的unordered_set。输入:nums1 = [1,2,2,1], nums2 = [2,2]输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。有一个点说明的是,如果不考虑去除交集中的重复,哈希表相比固定数组的优势是。

2025-05-12 11:27:23 496

原创 【Leetcode刷题随笔】242.有效的字母异位词

遍历s时在哈希表对应索引增加计数,遍历t时在哈希表对应索引减少技术,最后检查哈希表是不是全为0,如果有的索引还有计数,则说明两个字符串含有数量不一样的字符,不是有效的字母异位词,很好理解。根据题目,两个字符串都只包含小写字母,最多26个小写字母,所以构建哈希表的大小为26即可,字母a放到索引0,字母z放到索引25,依次填入。哈希表底层可以用一个数组实现,将两个字符串的字符映射到哈希表的每个索引中,然后依次对比两个哈希表内的元素是否一致即可。可以得到a的索引是0,b的索引是1,c的索引是2…

2025-04-21 11:42:22 499

原创 【Leetcode刷题随笔】206.反转链表

翻转一个单链表,示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。原题链接:206.反转链表.要反转一个链表,可以定义一个新的链表来实现反转,但是内存空间消耗更大。在原链表的基础上可以通过双指针的方法来改变next的方向。简单解释:首先定义一个指针cur和一个指针pre,cur初始指向头结点head,pre为NULL用于作为反转后链表的尾部所指向的NULL标志位。两个指针不断右移,遍历完链表并改变next指向。递归法和双指针法思路是一样的,二者的时间

2025-03-18 11:04:54 950

原创 【Leetcode刷题随笔】203移除链表元素

因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点,你可以直接将head指向下一个节点,但就和其他节点的处理规则不统一,需要另外的代码去专门处理头结点,对于复杂一点的问题比较麻烦。由于链表本身的性质,移除链表的某个节点a,只需要将前一个节点的next指针指向a的下一个节点即可(C或C++需要手动从内存中删除被移除的这个节点)。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]如果想用统一的逻辑处理所有节点,可以用。

2025-02-07 15:45:39 464

原创 【Leetcode刷题随笔】59 螺旋矩阵

C语言实现循环填充螺旋矩阵

2025-02-06 15:39:26 468

原创 【Leetcode刷题随笔 】209 长度最小的子数组

寻找数组长度可用两个for循环不断遍历累加,当累加的子数组大于等于给定目标 s 时比较长度即可。但两个for循环时间复杂度为O(n。输入:s = 7, nums = [2,3,1,2,4,3]解释:子数组 [4,3] 是该条件下的长度最小的子数组。如果不存在符合条件的子数组,返回 0。,找出该数组中满足其和 ≥ s 的长度。移动窗口方法的时间复杂度为O(n)。对于数组还有一种重要操作方法–

2025-01-06 10:30:49 692

原创 【Leetcode刷题随笔】977 有序数组的平方

在每次迭代中,它只比较两个元素的平方值,然后根据比较结果移动一个或两个指针(i 或 j,以及总是向前的 k)。由于每个元素最多被访问一次(无论是读取其值还是计算其平方),并且指针的移动是线性的(每次迭代最多移动一个指针),因此总的时间复杂度是线性的,即 O(n)。尽管有一个循环,但循环体内的操作(比较、平方、指针移动)都是常数时间操作,而且循环的次数与数组的大小成正比。解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]输出:[0,1,9,16,100]

2024-12-27 15:58:59 558

原创 【Leetcode刷题随笔】844 比较含退格的字符串

两种方法的时间复杂度都为O(N+M),其中 N 和 M 分别为字符串 S 和 T 的长度,都只需要遍历两字符串各一次。按自己能理解的方法去实现即可。

2024-12-27 11:12:14 1412

原创 【Leetcode刷题随笔】283 移动零

移动数组元素的题目,经典方法就是使用双指针。定义快慢指针遍历元素,非零元素移到前面,检查完所有非零元素之后对剩余位置填充0即可。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]

2024-12-26 10:43:54 269

原创 【Leetcode刷题随笔】26 删除有序数组中的重复项

提到移除数组中的元素,如果用C语言实现应该想到,因为C语言的数组是静态分配的,数组大小在其定义时就已确定,其内元素不可删除,只能覆盖。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。定义快慢指针,用快指针遍历到的不重复元素来覆盖慢指针指向的元素,以此得到最终不重复的数组长度。, 其中 n 是数组的长度,因为我们只遍历了数组一次。, 因为我们只使用了常量级别的额外空间(快指针和慢指针)。,返回删除后数组的新长度。输出:2, nums = [1,2,_]

2024-12-26 10:04:31 571

原创 【Leetcode刷题随笔】27 移除元素

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。元素的顺序可以改变,不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2,不需要考虑数组中超出新长度后面的元素。

2024-12-25 16:13:29 1014

原创 【Leetcode刷题随笔】34 在排序数组中查找元素的第一个和最后一个位置

使用二分查找法寻找排序数组中目标元素出现的第一个位置和最后一个位置

2024-12-09 15:46:13 371

原创 【Leetcode刷题随笔】3105 最长的严格递增或递减子数组

在一个整数数组中找到最长的严格递增或严格递减子数组的长度,并返回这个长度

2024-12-02 11:39:27 481

原创 【Leetcode刷题随笔】2765最长交替子数组

本文主要介绍了在整数数组中寻找最长 “交替子数组” 的问题及两种解题思路。交替子数组需按照 “递增 1,递减 1,递增 1…” 的模式循环排列且长度大于 1。

2024-11-26 15:47:28 1104

原创 【Leetcode刷题随笔】2760 最长奇偶子数组

leetcode刷题随笔,数组专栏

2024-11-20 14:50:20 481

原创 【Leetcode刷题随笔】2022将一维数组转变成二维数组

二维数组的构建是先构建m个指针,每个指针指向二维数组的一行,并通过malloc为其分配内存。该段代码主要理解参数 int** returnColumnSizes,该参数的主要作用是返回一个指向整数的指针数组,该数组中的每个整数表示二维数组中对应行的列数。original中下标从0到n-1(都包含)的元素构成二维数组的第一行,下标从n到2*n-1(都包含)的元素构成二维数组的第二行,以此类推。首先考虑题目所说的无法构成m*n的数组的情况,即m乘以n不等于原始一维数组的长度,则返回一个行数为0的空数组。

2024-11-19 16:43:19 583

原创 Win11安装mingw 64

将此包含gcc.exe的路径添加到系统环境变量中,路径要到bin结尾。(此电脑-属性-高级系统设置-系统变量-path-编辑-新建-复制路径-完成)。打开vscode的settings.json,添加上图中的g++路径。将单斜杠变为双斜杠。下载自己想要的版本然后解压缩就可以。

2024-11-08 16:37:44 1925 5

原创 Win11安装Git

安装过程如下(以Git-2.46.0-64-bit为例)。(我是个菜鸡,并没有完全搞懂每一项的意义,仅供自己记录所用,新手跟我一起选就行了,感兴趣可以去研究每一项是什么意思)官网下载速度较慢,可用国内镜像下载。偶然从博客大佬处看到一个非常好用的网站,创建秘钥:有两种秘钥,一种是rsa类型,一种是id_ed类型。也可以使用 where git 命令查看git的安装路径。将秘钥选一种复制到gerrit的ssh秘钥选项中即可。生成过程中都是一路回车,不用设置密码。

2024-11-08 16:21:57 899

原创 【Leetcode刷题随笔】按既定顺序创建目标数组

按既定顺序创建目标数组

2024-11-01 15:46:14 557

原创 【Leetcode刷题随笔】按奇偶排序数组

将一个整数数组中的元素按照奇偶性重新排序,使得所有的偶数都排在奇数的前面

2024-10-25 16:30:40 676

原创 【Leetcode刷题随笔】合并两个有序数组

本题需要对两个数组进行有序合并,而且是将小的数组合并到大的数组当中,即原地合并(in-place merge),所以可以逐个遍历两个数组中的元素,将较大的元素放置在大数组nums1的后面(如果按将小的放前面会覆盖nums1中前面部分的有效元素),直到两个数组的元素都处理完成。这种方法的优势在于它避免了创建新的数组来存储合并后的结果,从而节省了空间。就算nums1的长度大于m+n,后面还有多余的0值,这种方法也能有效规避,因为代码的填充逻辑是从m+n-1的位置开始填充,后续的0值不会被改动。

2024-10-24 11:08:56 635

原创 【刷题随笔】二叉树的中序遍历

二叉树中序遍历的递归和迭代两种方式C语言实现

2024-10-23 16:05:54 434

空空如也

空空如也

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

TA关注的人

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