
LeetCode & 牛客网 刷题篇
文章平均质量分 74
主要解析与记录一些经典值得思考的在线OJ题目
HinsCoder
写作之难,在于把网状的思考,用树状结构,体现在线性展开的语句里。——史蒂芬•平克
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【手撕OJ题】——141/142. 环形链表
解答:快指针一次走X步,慢指针一次走Y步,慢指针入环时二者的距离为N,快指针与慢指针之间的距离一次缩小X-Y,如果X-Y为1,则一定能够相遇;每一次追逐的过程中,距离都会缩小1,过程为:N、N-1、N-2、N-3、…解答:不一定,还是假设进环之后fast和slow之间的差距为N,每追逐一次,之间的距离缩小2步,过程为:N、N-2、N-4、N-6、…,对于这样的结果,如果之间的差距为。然后继续追逐下去,差距就变成了-1,意味着fast和slow之间的距离变成了C-1,C为环的长度,然后重新追逐。原创 2024-08-24 08:00:00 · 1050 阅读 · 0 评论 -
【手撕OJ题】——160. 相交链表
💡 思路:分别指向两个链表的头节点,循环这个链表,之后再去循环另一个链表。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3。输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。原创 2024-08-23 11:24:28 · 1067 阅读 · 0 评论 -
【手撕OJ题】——BM8 链表中倒数最后k个结点
例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示: 其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。如果该链表长度小于k,请返回一个长度为 0 的链表。💡 思路:遍历整个链表以计算出链表的长度n,然后倒数第k个元素即为第n-k个正数元素。解释:返回倒数第2个节点4,系统会打印后面所有的节点来比较。输入一个长度为 n 的链表,设链表中的元素的值为。解释:返回一个长度为 0 的链表。输入:{1,2,3,4,5},2。原创 2024-08-22 23:33:36 · 755 阅读 · 0 评论 -
【手撕OJ题】——876. 链表的中间结点
请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。💡 思路:遍历两遍数组,第一遍求出链表长度,第二步找出链表的中间节点并返回。解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。💡 思路:一次遍历即可找到中间节点。输入:head = [1,2,3,4,5,6]输入:head = [1,2,3,4,5]解释:链表只有一个中间结点,值为 3。)时,slow 为中间节点;,fast到达链表末尾时(即。时,slow 为中间节点。输出:[3,4,5]输出:[4,5,6]原创 2024-08-22 22:28:21 · 460 阅读 · 0 评论 -
【手撕OJ题】——206. 反转链表(三种思路:C实现)
*进阶:**链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?其实这个方法和第一个方法不能说很像,简直是一模一样。这个思路也适用于一个结点和NULL链表的情况。,请你反转链表,并返回反转后的链表。💡 思路:从前往后拿下来一个一个头插。💡 思路:从前往后一个一个方向反转。...原创 2022-08-07 22:47:43 · 410 阅读 · 0 评论 -
【手撕OJ题】——21. 合并两个有序链表(三种思路:C实现)
💡 思路:有哨兵位就很好处理了,处理尾插的逻辑就和头插一模一样,不用担心第一次插入的值是否为头部;两个链表的结点一一比较,一开始取较小的结点作为新链表的头,然后取较小的结点尾插到新链表上。💡 思路:合并两个链表和合并两个数组的最简单思路都一样的,都是从两个表中比较元素,新链表是通过拼接给定的两个链表的所有节点组成的。比较到尾时候,谁先结束到尾,还没到尾的,直接把剩下的链表插入到。🔎 面试题 25:合并两个排序的链表【剑指offer】⚡ 注意:第一次插入的时候,头插要单独处理,因为。...原创 2022-08-07 16:01:20 · 286 阅读 · 0 评论 -
【手撕OJ题】——203. 移除链表元素(四种思路:C实现)
🔎 203. 移除链表元素【难度:简单🟢】给你一个链表的头节点 和一个整数 ,请你删除链表中所有满足 的节点,并返回新的头节点提示:遍历链表,一一比较结点的val是否为要删除的。若为要删除的结点:先释放掉此结点,再将此结点的上一结点链接到此结点的下一结点💡 思路:定义一个:表示指向要删的元素结点;定义一个:表示要删的元素的前面的结点;区分头删和非头删的情况,头删则修改头指针的指向。先让的指向的;再释放;同时,要继续迭代往前走,找是否还有要删除的元素,此时让指向的即可;如果链表为空,直...原创 2022-08-07 14:06:01 · 334 阅读 · 0 评论 -
【手撕OJ题】——88、合并有序数组(两种思路:C实现)
从后往前合并,由于题目给出nums1的空间是比较大的,我们可以利用这个特性,合并到nums1中,不需要开辟额外的空间。从头开始,nums1和nums2比较,小的放到nums中即可,相同的取第一个;同时要注意:可以有nums1放完和nums2没放完的情况;还有nums2放完,nums1没放完的情况。情况2:nums1放完了,nums2还没放完,直接把nums2的都赋值过去给nums1即可;不行,因为如果是下图这样的示例,比如1和0比较,小的放到nums1,就会覆盖掉原数据。就放到nums1的最后面;...原创 2022-08-03 09:51:01 · 160 阅读 · 0 评论 -
【手撕OJ题】——26、删除有序数组中的重复项(三种思路:C实现)
只要nums[src]!那么就把 src对应的值赋值给dst+1的位置;思路:开辟额外空间tmp,用来保存只出现过一次的数字,就像相当于移除了重复元素;只要nums[src] 等于 nums[dst],那么就移动src++;思路:由于数组原先是有序的,那么就可以遍历数组,找相邻两个数是否相等;思路:用src = 1;指向nums数组下标;如果相等就把数组后面的元素往前移动;...原创 2022-08-02 21:43:31 · 269 阅读 · 0 评论 -
【手撕OJ题】——27.移除元素(三种思路:C实现)
思路:创建一个临时数组tmp,把nums数组中,不等于val的值,移动到临时数组tmp中,然后再把tmp的值覆盖回去nums中,并释放tmp。src找到不等于val的值那么就把它赋值给dst对应的值,即nums[dst] = nums[src],同时dst++;dst表示目的地指针,src是源指针,src用来移动寻找不等于val的值;src碰到于val相等的值,那么src++;思路:定义两个指针:一个dst,一个src;最坏情况:全是2,因此就是一个等差数列。思路:遍历遇到val,挪动覆盖删除。...原创 2022-08-02 20:50:46 · 140 阅读 · 0 评论 -
【手撕OJ题】——LeetCode算法入门(189. 轮转数组)
给你一个数组,将数组中的元素向右轮转k个位置,其中k是非负数。原创 2022-08-01 22:37:14 · 268 阅读 · 0 评论