代码随想录算法训练营第一天| 二分查找&移除元素
704. 二分查找
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
int mid;
while(left<=right)
{
mid=(right-left)/2+left;
if(nums[mid]==target) return mid;
else if(nums[mid]<target)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
return -1;
}
};
注意点:
1.mid=(right-left)/2+left 防止溢出;
2.while条件里是left<=right,有等号;
3.循环里nums[mid]和target之间的大于、小于、等于三种情况是并列,用if,else if和else;
4.暴力遍历时间复杂度为O(n),二分法为O(log2n)。
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];
slow++;
}
}
return slow;
}
};
注意点:
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新新数组下标的位置
打卡第一天完成10道题
需要再看的题目有:
35.搜索插入位置
34.在排序数组中查找元素的第一个和最后一个位置
需要复习的用法有:
substr()用法