代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素
704. 二分查找
题目链接:704. 二分查找
- 第二次刷一气呵成
- 能够熟练地掌握开区间和闭区间了
- 在nums[mid] > target的时候,说明目标值应该在左半区域,所以收窄右侧边界
- 同理,小于的时候收窄左侧边界
- 大家写二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。
- 空间复杂度:O(1)
- 时间复杂度:O(logn)
27. 移除元素
题目链接:27. 移除元素
-
暴力法,不管空间复杂度,可以创建一个新的数组跳过需要移除的元素
-
双指针法
- 快指针获取数组中新值
- 慢指针获取数组中需要更新的位置
-
相向指针法
class Solution { public: int removeElement(vector<int>& nums, int val) { int len = nums.size(); int left = 0; int right = nums.size() - 1; while(left <= right) { if(nums[left] == val){ int temp = nums[right]; nums[right] = nums[left]; nums[left] = temp; left--; right--; } left++; } return left; } };- 时间复杂度:O(n)
- 空间复杂度:O(1)