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

今天的题对于刚开始刷的新手感觉难度不大,也很大可能是用python的原因(笑),忙的要命的情况下花了一个小时的时间学习了一下

704 二分查找
数组是存放在连续区间上相同种类元素的集合,下标是从0开始的,数组元素不能删除只能覆盖
该题二分法使用的两个条件:

  1. 有序数组
  2. 无重复元素
    关键是理清楚区间问题,考虑使用闭区间还是左闭右开,这会影响区间左右值的更新

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left = 0
        right = len(nums)
        while left < right:
            middle = left + (right-left)//2
            
            if nums[middle] > target:
                right = middle
            elif nums[middle] < target:
                left = middle + 1
            else:
                return middle
        
        return -1

27 移除元素
学习了双指针法,其中快慢指针的定义分别为:

  1. 快指针:寻找数组中与目标值不同的元素位置
  2. 慢指针:将不含目标值覆盖原相同值的位置

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        fast_pin = 0
        slow_pin = 0
        for fast_pin in range(len(nums)):
            if nums[fast_pin] != val:
                nums[slow_pin] = nums[fast_pin]
                slow_pin += 1
        return slow_pin

你可能感兴趣的:(其他)