- 博客(5)
- 收藏
- 关注
原创 DAY4 | LeetCode 24. 两两交换链表中的节点 LeetCode19.删除链表的倒数第N个节点 LeetCode 面试题 02.07. 链表相交 LeetCode
该题的所有总结代码随想录都已经写的很好了,直接看,注意一点:快指针的速度只能是慢指针的两倍,慢指针一次移动一个节点,快指针一次移动两个节点。这是因为:快指针相对于慢指针的速度*t就是移动的节点数,这个节点数要有可能等于快慢指针初始时的相对距离,比如初始时快慢指针相距3个节点,但是快指针的速度是慢指针的3倍也就是相对于慢指针每个t移动两个节点,2*任意一个整数t都不可能==3所以这两个指针会永远错过。自己想法:和DAY3的删除一个节点差不多,利用循环遍历到需要删除的节点的前一个节点,然后再对指针重新赋值。
2023-09-09 22:08:33
1697
1
原创 二分边界问题(找到第一个大于等于该元素的下标...)的总结
力扣链接(opens new window)给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。public:// 情况一// 情况三// 情况二private:// 记录一下rightBorder没有被赋值的情况} else { // 寻找右边界,nums[middle] == target的时候更新left。
2023-09-08 21:40:06
106
1
原创 DAY3 203.移除链表元素、707.设计链表、206.反转链表
2.我们在插入节点的时候一定要注意顺序,如果先将要插入位置的前一个节点的next赋值给这个新结点,那么我们就会找不到插入节点之前的前一个节点的下一个节点的地址。当然我们也可以先将前一个节点的下一个节点的地址用一个临时的指针先记录下来。该代码在头结点那里会产生错误,如果一个链表中头结点就是需要删除的节点,那么p会被赋值为头结点,之后再被赋值为头结点的下一个节点,那么如果这个新的头结点又是需要被删除的节点,这个节点就没有被删除的机会,因为已经被移动到头结点的下一个节点了。//用来指向p节点的前驱。
2023-09-08 19:23:09
1786
原创 DAY2 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
看完视频:恍然大悟,我没有观察到这个平方数组的规律,他是从两头往中间来递减(初始数组最左边可能是负数,其平方是绝对值的平方)这个规律用来使用双指针十分好用,用两个指针一个指向头,另一个指向尾,用这两个指针指向的数值来选择较大的一个数放入新数组,注意要重新开一个数组,使用空间换时间。看完之后:我自己写的时候就是没有确定区间的不变量这个问题,所以四个循环会出现错乱,很乱,不容易修改,如果确定了左闭右开就更方便了。看完之后:直接遍历终点,再从终点的位置往前面搜索,搜索最小的区间,这样减少数字和计算的次数。
2023-09-07 22:16:17
1748
原创 DAY 1| 704. 二分查找、27. 移除元素
学习完之后:双指针做法,用快指针来遍历原先的数组,找到需要移除的元素,慢指针用来更新新数组(这个新数组也是在原来数组的基础上,因为会有需要移除的元素,所以新数组的大小不会超过原来数组的大小,所以可以直接使用原来数组,这也是题目的要求),当快指针遍历到了目标元素(这个元素是新数组不需要的)那么慢指针这个时候不会更新,其余时候慢指针都需要更新,并且需要将不用移除的元素直接复制到慢指针所指向的位置。自己想法:从前往后遍历,没有遇到#就加入新数组(也就是原数组),遇到#就将指针往后面退一格,但是这样问题很大。
2023-09-06 21:41:52
79
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人