- 博客(4)
- 收藏
- 关注
原创 代码修炼Day4_LeetCode24两两交换节点&19删除链表的倒数第N个节点&面试链表相交&142环形链表II
让fast先移动n个节点,然后fast和slow同时移动,知道fast指向链尾,删除slow指向的节点即可。使用虚拟头结点方便统一操作,需要一个指向下一组进行两两交换的指针记录位置,同时使用p,q保存临时节点。对于环的判断,可以使用双指针,fast每次比slow多走一步即可得出,如果有环就会相遇。题目好理解,用数学算式可以推出来关系表达式,但是代码实现确实有点思路跟不上了…可以遍历一次得到链长L,第二次遍历到L-n+1即为应删除节点。时间复杂度:O(a+b),链表A、B的节点数量为a、b。
2023-04-23 00:12:27 216
原创 代码修炼Day3_LeetCode203移除链表元素&707设计链表&206翻转链表
单链表删除节点,先找到需删除节点的前节点,将前节点直接指向该节点的后节点进行删除。此算法直接对原链表进行修改,可优化,设置虚头结点,方便统一操作。为了统一操作,设置了虚拟头结点。设置借口,需要注意边界细节。翻转链表可以直接使用双指针来改变指针方向。时间复杂度:O(n),需要将链表遍历一遍。设计思路一样,但更繁琐,后面补代码。时间复杂度:O(n)空间复杂度:O(1)空间复杂度:O(1)
2023-04-22 16:17:02 334 1
原创 代码修炼Day2_LeetCode977有序数组的平方&209长度最小的子数组&59螺旋矩阵II
再重新定义一个和原数组一样大小的数组,将比较后的最大值放到新数组的最后面,进行头插,得到一个非递减的有序数组的平方数组。因为原数组有序(非递减),那么可以由两边向中间进行比较,因为左侧可能是负数,平方后的值可能比右侧大,也可能比右侧小。【注】暴力排序的时间复杂度为O(n+nlogn),可视为O(nlogn)滑动窗口其实和双指针类似,其中i为子数组起始位置,j为子数组终止位置。双层for循环,i为起始位置,j为终止位置,遍历出符合条件的子数组。此时将i向右移动,判断移动后的新数组是否仍大于等于target,
2023-04-21 00:37:45 323 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人