代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
-
704.二分查找
本题主要考察数组的二分类查找,看似容易但是存在几个易错的地方。
- while语句内的条件判断(< or <=)
- 指针移动的时候middle是否需要加入(左闭右闭 or 左闭右开)
总结:在循环中坚持根据查找区间的定义来做边界处理,就是循环不变量规则。
-
27.移除元素
本题主要考察数组的元素在内存中如何存储,易错的点在于要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。最开始我们可以尝试的方法就是暴力解法,两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。
- 时间复杂度是O(n^2),空间复杂度:O(1)
更优的解法是利用双指针法,通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
- 快指针:寻找新数组的元素,新数组就是不含有目标元素的数组
- 慢指针:指向更新新数组下标的位置
这个方法的好处就在于并没有改变元素的相对位置
- 时间复杂度是O(n),空间复杂度:O(1)