704 二分查找
二分查找应该有三类题,
1. 等于x的下标。
2.大于等于x的最小下标 upper_bound
3.小于等于x的最大下标 lower_bound
二分法有两个点比较容易出错
1. while(left < or <= right)
2. right = middle or middle -1
坚持循环不变量,左闭右闭,左闭右开
循环边界每次都一样的。
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size() == 0)
{
return -1;
}
int left = 0;
int right = nums.size()-1;
while(left <= right)
{
int mid = left + (right-left) /2;
if(nums[mid] < target)
{
left = mid + 1;
}
else if (nums[mid] > target)
{
right = mid -1;
}
else
{
return mid;
}
}
return -1;
}
};
27. 移除数组元素
需要在O(n)的时间内移除数组元素
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
if(nums.size() ==0)
{
return 0;
}
int fast = 0;
int slow = 0;
for(int i = 0; i < nums.size(); i++)
{
if(nums[fast] != val)
{
nums[slow] = nums[fast];
fast ++;
slow ++;
}
else
{
fast ++;
}
}
return slow;
}
};

179

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



