二分查找的变体不太熟练,快慢指针感觉还好。
704.二分查找
二分法的循环条件不清晰
刚上来的时候甚至连while()
里面写什么都不知道,想把 left<right
和 target!=nums[mid]
都加进去。
左闭右闭还是左闭右开不管哪种,都是要结合边界的收缩,做到不遗漏(会导致错过target)和不停滞(会导致陷入死循环)。
卡哥说得对, 一看就会,一写就废其实主要就是对区间的定义没有理解清楚,在循环中没有始终坚持根据查找区间的定义来做边界处理 。
35.搜索插入位置
多了边界的讨论,
比二分多了一个判断target不存在的时候要插入到那个位置。具体到这种情况应该是在low==high
之后的讨论。
34.寻找左右边界(还没掌握)
分别寻找左右边界的时候,将==
的情况合并到<
或>
的情况中,是在基本二分法基础上的建设。也是检查活学活用的能力吧。
左右边界不是很会(即使之前已经做过一次)leftBorder 一直跟踪 high;
27 移除元素
暴力法,每发现一个,后面的都前移。
快慢指针还是第一次用,不太牢固或者说其他地方用得不多。
自己写的快慢指针有问题,样例第一个3223会将第一个3放进去,但是自己debug也没找到哪儿错了。
想起训练营精华中说的“代码全删”,从头开始,别再走歪的的路上不回头了。
对比代码,自己之前的代码更像是在打补丁。
283.移动零
和母题27基本一致;
977.有序数组的平方
找到最小值点即可,类似归并排序的收尾部分。