- 博客(12)
- 收藏
- 关注
原创 力扣-25 K个一组反转链表
需要特别注意的是一点:在进行reverseBetween()函数调用时,不能直接使用head进行传递,因为head也需要进行反转,故再次返回时head并不是反转后链表第一个节点,因此需要定义一个哑节点dummy,再调用时传递dummy,然后从dummy->next(即head)开始反转,这样dummy->next将一直指向反转后链表第一个节点。
2024-12-21 01:05:50
247
原创 力扣-92 反转链表Ⅱ
方法一的缺点是:如果 left 和 right 的区域很大,恰好是链表的头节点和尾节点时,找到 left 和 right 需要遍历一次,反转它们之间的链表还需要遍历一次,虽然总的时间复杂度为 O(N),但遍历了链表 2 次,方法二可以只遍历一次。提示:因为两个链表连接点均已保存,故反转完毕直接连接即可,但该方法需要遍历两边链表(找寻关键节点一遍+反转链表一遍)
2024-12-20 19:35:57
338
原创 力扣-142 环形链表Ⅱ
不用公式计算,更为清晰的解读则是:快指针走过的距离是两倍,慢指针是一倍。这是第一次写题时使用的方法,该方法使用了循环查找的思想,p每次前进一步,然后q从head开始,若q = p->next,则说明q为环起点,否则q向后一步,知道q = q循环结束;此时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 a+n(b+c)+b=a+(n+1)b+nc。有了 a=c+(n−1)(b+c) 的等量关系,我们会发现:从相遇点到入环点的距离加上 n−1 圈的环长,恰好等于从链表头部到入环点的距离。
2024-12-20 08:37:15
1209
原创 力扣-24 两两交换链表中节点
这种递归方法的优点是代码简洁,逻辑清晰,不需要额外的空间来存储节点,也不需要显式地操作指针来连接节点。递归的每一步都处理一对节点,并且自然地递归到下一对节点,直到整个链表被遍历完毕。最终,这个递归过程会返回交换后链表的新头节点,如果原始链表的头节点是第一对中的第二个节点,或者是没有配对的单个节点。第一次使用下面这种方法,比较原始,使用了4个节点,q是dummy,其余三个节点则在循环中移动。经过kimi润色后变为一下代码,虽然也是用四个节点,但更为清晰明了,其空间复杂度只有略小变化。
2024-12-19 05:06:51
263
原创 力扣-328 奇偶链表
关键是3,因为此处为单链表,无法直接找到q前一个结点(虽然可通过count/2的值来计算next数量,但过于复杂),此处直接定义一个temp节点,每次q指向奇数节点时,既让temp指向后面的偶数节点,故下一次循环中,temp即为q的前一个节点。应在最前面,这就要求在第一次循环开始前就要先定义temp,此处令p指向head,q指向head->next,count=2,temp=q,则开始循环后q = q->next;,temp即指向奇数节点q的前一个偶数节点。3. 让q的前一个结点指向q->next。
2024-12-19 04:03:28
243
原创 力扣-378 有序矩阵中第K小元素
2. mid = left + ((right - left) / 2),计算矩阵中小于等于mid的元素数量count,表示矩阵中[left, mid]的个数为count(后式中是否需要加1则要看left=mid还是mid+1,若mid则说明left值有可能不变,6. 循环结束条件是left < right,若初始情况left == right,则第k个元素肯定为left/right,若经过多次二分,因为5的保证,循环结束,则第k个元素肯定为left/right。
2024-12-17 21:45:30
363
原创 力扣21-合并两个有序链表
需要注意的是最后需要返回链表第一个节点,因此需要一个不移动的头节点和一个随链表增长往后移动的哨兵节点。还有哨兵节点p向后移动时,该节点next指针会指向下一个升序节点,下一次val值判断时才可知晓。
2024-12-17 18:50:06
200
原创 剑指 Offer 06. 从尾到头打印链表
先计算链表长度,传入returnSize中,然后根据此长度创建数组,将链表节点中值从后往前传入数组中即可。输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
2023-07-01 13:17:30
63
原创 JZ5 替换空格
在使用sizeof()求字符串长度时,会将 ‘\0’ 也计算到字符串长度中。在C语言中,sizeof() 是长度的运算符,括号中可以放入数据类型或者表达式,一般我们用来计算字符串长度。在使用strlen函数时,需要添加string.h头文件,该函数会将字符串长度计算出,不包含 ‘\0’。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。如果不想使用sizeof()和strlen(),可以利用循环来判断字符串的长度。输入:"We Are Happy"
2023-06-27 05:32:23
84
1
原创 JZ4 二维数组中的查找
在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。数据范围:矩阵的长宽满足 0≤�,�≤5000≤n,m≤500 , 矩阵中的值满足 0≤���≤1090≤val≤109。这种方法比较麻烦,纯粹是为了练习一下二分查找的应用,不过优点是空间占用稍微小一点。进阶:空间复杂度 �(1)O(1) ,时间复杂度 �(�+�)O(n+m)右上角逐渐逼近左下角。
2023-06-24 18:55:59
79
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅