| 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;
}
};
总结:双指针的应用,快的指针指向要处理的数组,慢的指针指向处理完成的数组,最后返回慢的指针即可
看了一下别人的代码,那个交换可以直接换成赋值,可以有效提高代码的时间复杂度
这两道题比较基础,没啥可说的
文章介绍了如何使用二分查找算法在给定数组中寻找目标值,以及如何利用双指针技巧从数组中移除特定元素。在二分查找中,重点在于找到正确的区间并处理边界条件。在移除元素问题中,快慢指针的使用确保了有效处理数组。代码中提及的交换操作可以优化为直接赋值以提高效率。
1166

被折叠的 条评论
为什么被折叠?



