Leetcode-数组篇 Day 1

118 阅读1分钟

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

  • 704.二分查找

题目链接 视频讲解

本题主要考察数组的二分类查找,看似容易但是存在几个易错的地方。

  • while语句内的条件判断(< or <=)
  • 指针移动的时候middle是否需要加入(左闭右闭 or 左闭右开)

总结:在循环中坚持根据查找区间的定义来做边界处理,就是循环不变量规则。

  • 27.移除元素

题目链接 视频讲解

本题主要考察数组的元素在内存中如何存储,易错的点在于要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。最开始我们可以尝试的方法就是暴力解法,两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组

  • 时间复杂度是O(n^2),空间复杂度:O(1)

更优的解法是利用双指针法通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

  • 快指针:寻找新数组的元素,新数组就是不含有目标元素的数组
  • 慢指针:指向更新新数组下标的位置

这个方法的好处就在于并没有改变元素的相对位置

  • 时间复杂度是O(n),空间复杂度:O(1)