美文网首页
二分查找的四种变形 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