1. 二分查找
【重点】对边界的定义
区间定义 | 边界条件 |
---|---|
左闭右闭 [left, right] | <=;middle-1 |
左闭右开 [left, right) | <;middle |
这里采用左闭右闭的写法进行代码编写
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left <= right){
int middle = left + (right - left) / 2;
if (nums[middle] > target){
right = middle - 1;
}
else if (nums[middle] < target){
left = middle + 1;
}
else {
return middle;
}
}
return -1;
}
};
2. 移除元素
【重点】双指针法
运用快慢指针解决问题,快指针按照for循环向前走,只要不等于目标值,就把满指针指向的值覆盖,再将满指针向前移动,最后新数组的长度就是满指针。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
for (int fast = 0; fast <= nums.size() - 1; fast++){
if (nums[fast] != val){
nums[slow++] = nums[fast];
}
}
return slow;
}
};