美文网首页
二分查找的四种变形 by Python

二分查找的四种变形 by Python

作者: 慧鑫coming | 来源:发表于2019-02-04 07:08 被阅读0次

    四种常见二分查找变形问题:

    • 注:假定测试数据都是从小到大的有序数组
    • 查找第一个等于给定值的元素
    class Solution:
        def bsearch(self, nums, val):
            """
            :type nums: List[int]
            :type val: int
            :rtype: int
            """
            low, high = 0 ,len(nums) - 1
            while low <= high:
                mid = low + ((high - low) >> 1)
                if nums[mid] == val:
                    if mid == 0 or nums[mid-1] != val:
                        return mid
                    else:
                        high = mid - 1
                elif nums[mid] > val:
                    high = mid - 1
                else:
                    low = mid + 1
            return -1
    
    • 查找最后一个等于给定值的元素
    class Solution:
        def bsearch(self, nums, val):
            """
            :type nums: List[int]
            :type val: int
            :rtype: int
            """
            low, high = 0 ,len(nums) - 1
            while low <= high:
                mid = low + ((high - low) >> 1)
                if nums[mid] == val:
                    if mid == len(nums)-1 or nums[mid+1] != val:
                        return mid
                    else:
                        low = mid + 1
                elif nums[mid] > val:
                    high = mid - 1
                else:
                    low = mid + 1
            return -1
    
    • 查找第一个大于等于给定值的元素
    class Solution:
        def bsearch(self, nums, val):
            """
            :type nums: List[int]
            :type val: int
            :rtype: int
            """
            low, high = 0 ,len(nums) - 1
            while low <= high:
                mid = low + ((high - low) >> 1)
                if nums[mid] >= val:
                    if mid == 0 or nums[mid-1] < val:
                        return mid
                    else:
                        high = mid - 1
                else:
                    low = mid + 1
            return -1
    
    • 查找最后一个小于等于给定值的元素
    class Solution:
        def bsearch(self, nums, val):
            """
            :type nums: List[int]
            :type val: int
            :rtype: int
            """
            low, high = 0 ,len(nums) - 1
            while low <= high:
                mid = low + ((high - low) >> 1)
                if nums[mid] <= val:
                    if mid == len(nums)-1 or nums[mid+1] > val:
                        return mid
                    else:
                        low = mid + 1
                else:
                    high = mid - 1
            return -1
    

    相关文章

      网友评论

          本文标题:二分查找的四种变形 by Python

          本文链接:https://www.haomeiwen.com/subject/vpfpsqtx.html