704. 二分查找
题目 二分查找
关键内容:边界检查条件
int search(vector<int>& nums, int target) {
int l = 0, r = nums.size() - 1;
while (l <= r)
{
int mid = (l + r) >> 1;
int q = nums[mid];
if (target < q) r = mid - 1;
else if (target > q) l = mid + 1;
else return mid;
}
return -1;
}
27. 移除元素
1.快慢指针处理数组
这个还挺有意思的,正常数组删除元素很麻烦,先要遍历到对应位置,再挪动后面的补到前面来
如果是多次处理的话很费时间
快慢指针的话可以一次遍历处理多次删除,
int removeElement(vector<int>& nums, int val) {
//用快慢指针
int fastIndex = 0, slowIndex = 0;
//快指针始终遍历,慢指针只在不删除元素时前进
for (; fastIndex < nums.size(); fastIndex++)
{
if (nums[fastIndex] != val)
{
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}