二分查找
题目: https://leetcode.cn/problems/binary-search/description/
在这里插入图片描述
解法: c++ vector提供了lower_bound, algorithm中也有lower_bound, 本题手动实现二分查找
class Solution {
public:
// 左闭右闭
int lower_bound1(vector<int> &nums, int target){
int left = 0, right = nums.size() - 1; // 闭区间 [left, right]
while(left <= right){
int mid = left + (right - left) / 2;
if(nums[mid] < target){ // 这里要小于
left = mid + 1;
}else{
right = mid - 1;
}
}
return left < nums.size() && nums[left] == target ? left : -1;
}
//左闭右开
int lower_bound2(vector<int> &nums, int target){
int left = 0, right = nums.size(); // 左闭右开区间 [left, right)
while(left < right){
int mid = left + (right - left) / 2;
if(nums[mid] < target){
left = mid + 1;
}else{
right = mid;
}
}
return left < nums.size() && nums[left] == target ? left : -1;
}
int search(vector<int>& nums, int target) {
return lower_bound2(nums, target);
}
};
移除元素
题目:https://leetcode.cn/problems/remove-element/
双指针法
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n=0;
for(int i=0;i<nums.size();i++){
if(nums[i]!=val){
nums[n++]=nums[i];
}
}
return n;
}
};
小结
今天的题目比较简单,但是没有太多时间去做,匆匆整理了一下,我需要分配更多时间。