Leetcode| 704. 二分查找、27. 移除元素 Day1

43 阅读1分钟

704. Binary Search - LeetCode

这道题是基础的二分查找,主要有两种写法:左闭右闭和左闭右开。

左闭右闭的搜索范围是[left, right],while循环里left == right的情况是合法的,比如[1, 1],所以if(nums[middle] > target),right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1

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

左闭右开的搜索范围是[left, right),while循环里left == right的情况是不合法的,比如[1, 1),所以if(nums[middle] > target),right 要赋值为 middle,即:下一个查询区间不会去比较nums[middle]

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

27. Remove Element - LeetCode

...