代码随想录算法训练营Day1| 704. 二分查找 27. 移除元素

Leetcode 704 二分查找

二分搜索法:判断是否存在target和数组的下标。未找到则返回-1.

注意事项:while(left < right) or <= ; middle or middle-1

一般情况下:左闭右闭[left, rught]; 左闭右开[left, right)

伪代码:左闭右闭

left = 0
right = num.size-1
## 数组的左右边界
while (left <= right){
 ## 合法的区间,左闭右闭:小于等于;
     middle = (left + right)/2
if(nums[middle] > target) ##更新左边界
     right = middle-1 ##左闭右闭 下一个循环里不包含middle
else if(nums[middle]< target)
     left = middle+1
   else return middle;
}

return -1;

伪代码:左闭右开

left = 0
right = num.size
while(left < right) {
    middle = (left + right)/2
 if(nums[middle] > target)
    right = middle
else if (nums[middle] < target)
    left = middle + 1
else return middle;
}
return -1;

Leetcode 27 移除元素

在数组中删除元素,数据是一个连续的;vector size  物理空间

erase函数是一个O(n)并不是O(1); 删除元素的一个过程,在数组中删除某一个元素,将其后面的所有元素前移一位进行覆盖,利用两层for循环进行覆盖;

双指针:快指针是用来获取新数组中的元素;慢指针是获取新数组的位置

例如

1 2 3 4 3 5

删除目标值3:设置两个指针,快指针和慢指针;

val = 3
slow = 0
for(fast = 0; fast < num.size; fast ++);{
    if(nums[fast] != val){
       nums[slow] = nums[fast];
          slow ++;
      }
}

双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。

你可能感兴趣的:(算法,leetcode,职场和发展)