打卡第一天| 704. 二分查找、27. 移除元素
704.二分查找
看到题目就想到曾经做过类似的,先取得左右边界,然后求中间值,如果要求的数在nums[middle]左边,就把右边界取middle-1,同理如果要求的数在nums[middle]右边,就把左边界取middle+1,代码如下。
class Solution {
public:
int search(vector<int>& nums, int target) {
int start = 0;
int end = nums.size() - 1;
while(start <= end){
int middle = (start+end)/2;
if(nums[middle]>target){
end = middle - 1;
}
else if(nums[middle]<target){
start = middle + 1;
}
else{
return middle;
}
}
return -1;
}
};
27.移除元素
移除元素使用了两个指针,一个快指针,一个慢指针,快指针总是自增,所以写入for循环,慢指针在快指针指向的数字不等于val时被快指针赋值,快指针指向的数字与val相等时反而不赋值,这样可以使得在下一轮循环开始时,val被替换掉,代码如下。
class Solution {
public:
int removeElement(vector<int> &nums, int val)
{
int slowIndex = 0;
int size = nums.size();
for (int fastIndex = 0; fastIndex < size; fastIndex++)
{
if (val != nums[fastIndex])
{
nums[slowIndex++] = nums[fastIndex];
}
}
return slowIndex;
}
};