文档讲解:代码随想录
704 二分查找
经典题型
记忆点:
- 写成 mid = l + (r - l) / 2或者 mid = l + ((r - l) >> 1) 可以避免溢出问题(两个int直接相加可能会越界)
- 记模板:l <= r; l = mid + 1; r = mid - 1 (左闭右闭)
写while中判定以及重新定义mid时,确立合法区间
左闭右闭 r = nums.size() - 1; l <= r; l = mid + 1; r = mid - 1
左闭右开 r = nums.size(); l < r; l = mid + 1; r = mid;
27 移除元素
双指针法
一开始写冗杂了,采用头和尾两个指针的方式
评论区的题解采用了快满指针的方式
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int l = 0;
for (int n : nums) {
if (n == val) {
continue;
}
nums[l++] = n;
}
return l;
}
};
977 有序数组的平方
双指针法 可以得到由大到小排列的数组
想得到由小到大的数组,因此更新新的数组时,下标应由大到小更新(数组长度已经确定)
初始化数组:
vector ans(nums.size());