704. 二分查找
题目链接:704. 二分查找
思路:通过比较左边界 left 和右边界 right 的中间值 middle 和需要寻找的 target 值,不断更新左/右边界值,最终收敛到需要寻找的值
难点:在于 while 的条件应该是 left < right 还是 left <= right,以及更新左/右边界值时候,应该更新为 middle, 还是middle +- 1
要点:关注合法区间(可能是左闭右闭区间 / 左闭右开)
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size();
while(left < right){
int middle = (left + right)/2;
if(nums[middle]<target){
left = middle+1;
}else if(nums[middle]>target){
right = middle;
}else return middle;
}
return -1;
}
};
27. 移除元素
题目链接:27. 移除元素
暴力解法值得关注(循环条件的控制)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
for(int fast = 0; fast < nums.size(); fast++){
if(nums[fast] != val){
nums[slow++] = nums[fast];
}
}
return slow;
}
};