- 博客(16)
- 收藏
- 关注
原创 DAY2 链表&作业枚举四道题
由于考虑到特殊情况——头结点删除,所以给头结点的前面设置一个指针指向头结点:记得最终返回的是头结点。要想快指针到终点,慢指针同时到目标前一个,此时距离相差n!快指针先走n+1步,然后快慢指针一起走。快 - 快开始 = L -(L-n+1) +1 = n。作业答案:外层*3遍历,内层分别c5和c7进行遍历。注意plan是全局变量,在函数内声明。慢位置 + D = L-n+1。3.19删除链表的倒数元素。1.203移除链表元素。快位置 + D =L。
2026-10-26 20:37:37
211
原创 DAY 1 数组力扣——代码随想录
1.此时注意right的值要等于right2.等于left可以等于right,while 循环取等号3.大于时,目标在左边,同时又是左闭右闭区间,此时right等于mid-1,left同理mid+1。1.right的位置比数组最后一个加12.while left不能等于right了3.此时left由于是闭区间,还是等于mid+1,但是right要等于mid,等于mid+1将会使该位置数字消失。跟暴力解法的思想一致,快指针遍历,慢指针在不相等时候就往后面走一个,等于就快指针往后走,直到遇到不相等的。
2026-10-22 19:10:36
64
原创 acwing第二章数组
插入和删除首先要找到插入索引前的pred才可以,这需要从head节点循环往下找,然后注意先动后面,即cur->pred.next,然后pred.next->cur,删除也是这样。写的时候注意链表和数组一样索引是从0开始的,所以要找到index前一个位置,即index-1,在查找index处的数值时,要找到index的位置。这里很好的一个方法是提出了_getnode方法,只用一次就可以获得任何节点的位置,包括删除、添加用到的index前一个节点位置,和查找时index节点。2.增加和删除的时候的顺序。
2025-07-19 20:12:45
301
原创 # yum makecacheLoaded plugins: fastestmirror, langpacksDetermining fastest mirror,
先在命令行输入vim /etc/yum.repos.d/CentOS-Base.repo。
2024-10-20 19:17:06
571
原创 代码随想录第14天 二叉树Part01 递归遍历 迭代遍历
中序遍历和前序遍历不同,因为前序遍历的根左右,每次遍历到根后,直接将根的值放进结果数组了,但是对于中序遍历,需要一直找到最左的孩子,然后才开始往结果数组里面填数。那么在栈内可以放每次遍历的左孩子,并由cur指针指向这个左孩子,当cur为空的时候,没有左孩子了,那么就可以开始往结果数组里面填数了,填的就是让栈里面弹出一个元素的值,此时的cur指向这个元素,然后让cur去遍历它的右子树。每次递归的时候递归的使用这个递归方法,让root结点的左右孩子作为下一个root结点进行遍历,直到root的孩子为空就返回。
2024-05-21 19:44:45
817
原创 代码随想录 第11天 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
这是注意到数字的前后顺序对运算的结果有影响的是减法和除法,所以弹出的第一个数字是运算中的后面的数字,所以用num2代表弹出的第一个元素。这道题也是用栈的思想来做,栈首的字母和字符串中的字母不重复就放进栈里,重复的就不放,顺便将栈首元素弹出。注意讨论一下栈是否为空的条件,因为当栈为空的时候,没办法取到栈首的元素。3.“((({})”遍历结束后,发现栈不为空,说明左括号过多,无法匹配,这个放到循环外面进行即可。最后将栈内的元素转化为字符串的时候,注意栈是先进后出,所以将后出来的元素放到前面,顺序才正确。
2024-05-18 13:52:45
662
原创 代码随想录:第十天 232.用栈实现队列225用队列实现栈
用队列实现栈可以借助两个单向队列,有一个简便的方法,借助双向队列,将栈里面的数据先放进队列里,然后在队列里面的元素,由于想弹出的元素在队列的最里面,此时将最里面元素之前的元素都弹出,再放到该队列的末尾即可。用栈实现队列的输出需要借助两个栈,先将队列的数据放进栈1,然后将栈1中的数据放进栈2中,只要栈2里面的数据非空,就将栈1里面的元素往里面放。
2024-05-17 22:30:41
552
原创 代码随想录算法训练营第七天| 454.四数相加II,383. 赎金信,15. 三数之和 18. 四数之和
对于b和c的去重,是在找到一个解的情况下进行的,因为[-1,-1,-1,0,1,1,1]这个时候,找到一个解[-1,1]就可以让left和right一直移动了,直到找到不重复的数。这个条件不是写在while循环里面,因为[-2,0,1,1,2],对于这个数组,[[-2,0,2],[-2,1,1]],后者的写法只返回第一个而缺失了[-2,1,1]这个数组。时间复杂度O(n2)时间复杂度O(n3)两种方法,一种是用数组记录,用时比Map的时间短,时间复杂度都为O(n)。时间复杂度O(n2)
2024-05-14 21:11:06
761
原创 代码随想录算法训练营第六天|242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
无限循环,始终变不到1,这句话表明如果n的值不为1,最后出现循环了,那么就代表不属于快乐数,判断n是否重复出现并且不是1,就和哈希表的使用条件对应了,用set来存放每一次的更新的n值即可。题目中限定了数组中的元素大小为1~1000之间,所以也可以考虑使用数组来存放,这里不存放重复值的写法是将数组的对应的数值恒定的设置为1,对于nums1,如果当前的元素在数组中的值为1,那么就放进set集合中。同时要返回下标,考虑使用HashMap,这里注意,Key是存放的num,而Value存放的是下标。
2024-05-13 21:07:30
877
1
原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II
如何找到倒数第n个结点的值是关键,双指针思想,让快指针先移动n+1个位置(注意不是n),这时候再同时移动两个指针,慢指针就来到了第n个结点的前一个结点位置,然后删除即可。(涉及到链表的插入和删除都要使用虚拟头结点!首先需要找到开始比较的位置,由于两个链表长度不一样,所以让长的链表先移动两个链表长度的差值,然后两个链表长度相等了再一起移动进行判断。再进行长度比较时需要记录两个链表长度的差值,并根据此移动较长的链表,所以可以选链表A为最长的链表,如果链表B比A长,就让A和B交换,始终保持链表A是最长的。
2024-05-11 20:55:58
513
2
原创 代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表,206.反转链表
递归算法就是找相似,总是让后一个指针指向前一个指针,不断更新传入的参数,就是将pre和cur向后移动一位,到最后传入的反转的位置为null时,即到达了最后,返回pre头结点。循环的条件是到了最后cur的值为null。增删结点的核心在于找到目标位置的前一个位置,因为插入和删除都需要前一个结点操作,所以for循环中找的是目标位置的前一个位置。当cur.next存放的是目标值时,不用更新cur 的值,因为此时cur.next是新的值,还没有进行判断。注意链表的下标和数组一样,都是从0开始的。
2024-05-10 22:43:01
400
1
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
移动的过程中最后一个元素注意不要超出索引位置,移动完成之后由于最后一个位置放的仍然是原数组的最后一个元素,所以数组的大小要减去1,同时注意由于i位置后的元素都移动了,所以i位置要重新判断,所以i-1,然后等待下次循环的时候再次遍历i位置。循环的时候注意有两种写法,一种是左闭右闭区间,另外一种是左闭右开区间。注意mid的值要放在循环里面,每一次都需要重新计算。一个指针用放数组元素,另一个指针用来找不重复的元素。一层循环遍历数组,一层循环把后面的元素往前移动。注意原题给的是有序数组。
2024-05-08 12:27:21
451
1
原创 力扣203:长度最小的子数组
滑动窗口解决,只用遍历一次right,left的值在找到大于等于target的位置用变量minlen。此时要让minlen的值为一个无穷大的数。先记住长度,直接让left+1,然后遇到大于等于target的位置继续让right移动。找到的长度如果小就替换。
2024-05-02 19:34:22
217
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅