| 704. 二分查找、27. 移除元素
704. 二分查找 - 力扣(LeetCode)
思路:找到对应区间很关键,要理解<=和<的对应代码以及它的含义!
classSolution {
public:
intsearch(vector<int>&nums, inttarget) {
intleft=0;
intright=nums.size()-1;
while(left<=right){
intmiddle= (left+right)/2;
if (nums[middle] <target ){
left=middle+1;
}
elseif (nums[middle] >target ){
right=middle-1;
}
else{
returnmiddle;
}
}
return-1;
}
};
27. 移除元素 - 力扣(LeetCode)
classSolution {
public:
voidmy_swap(int&a,int&b){
inttmp;
tmp=a;
a=b;
b=tmp;
}
intremoveElement(vector<int>&nums, intval) {
intlow=0;
intfast=0;
intn=nums.size() -1;
while(fast<=n){
if(nums[fast] ==val){
fast++;
}
elseif(nums[fast] !=val){
my_swap(nums[fast],nums[low]);
fast++;
low++;
}
}
returnlow;
}
};
总结:双指针的应用,快的指针指向要处理的数组,慢的指针指向处理完成的数组,最后返回慢的指针即可
看了一下别人的代码,那个交换可以直接换成赋值,可以有效提高代码的时间复杂度
这两道题比较基础,没啥可说的