704. 二分查找
b站参考视频:https://www.bilibili.com/video/BV1fA4y1o715
状态:顺利用c++和pyhon两种语言做出左闭右闭区间下的情况
初始思路:很简单的二分法,只需要根据有序数组的特性进行比较搜索。
看完讲解视频之后的想法:我虽然做出了这道题目,但是我认为我的思考不够深入,没有意识到这个问题的核心是区间保持。如果是左闭右闭,那么左右元素都包含在区间内。左闭右开右边界是不包含于区间内的。不同的区间设置会影响初始left和right的赋值、循环终止的条件,也会影响后续循环过程中的赋值。但是我并没有意识到这一点,像一个莽夫,没有逻辑,仅仅凭借直觉去面对问题。
27. 移除元素
b站参考视频:https://www.bilibili.com/video/BV12A4y1Z7LP/?vd_source=93ab0cdef07eaa3015e60cacd82f8d4f
状态:c++和python均调用库函数实现,尝试双指针我想的是头尾指针,但是逻辑混乱,没有成功。
初始思路:首先c++提供了erase,python中提供了pop和del,均可以调用库函数遍历解决。然后还可以双指针。
看了一部分讲解视频之后:首先可以考虑遍历,当发现目标元素的时候,再嵌套循环,将后边的所有元素移上来。最重要的是采用双指针,slow指针是用于记录下一个非删除元素所在的位置,而fast则用于寻找非删除元素,很巧妙的思想。
拓展题 977. 有序数组的平方
状态:c++大体思路正确,但是细节不到位,出现了数组越界行为。
初始思路:先找到第一个非负数,然后左右指针分别扫描。
自己调试发现:1.初始思路太粗糙了,没有考虑到全正全负的情况,导致找第一个非负数这部分代码出现了越界和后续处理不当。2.后来双指针遍历比较的时候,只要其中一个指针越界遍历就会停止。但是我没有考虑到需要将没有遍历完的那个遍历完。总结我认为自己思维很混乱,边界条件也考虑的不清晰。
看了讲解视频之后:我认为他的思路很不一样,原来是可以从大到小来填充,这样对边界情况的处理会简单很多,也少了很多我的方法会出现的特殊情况。