LeetCode刷题笔记(十一)二分法

十一. 二分法

代码模板:

left, right = 0, len(array)-1
while left <= right:
    mid = left + (right - left)/2
    if array[mid] == target:
        break or return result
    elif array[mid] < target:
        left = mid + 1
    else:
        right = mid - 1
35. 搜索插入位置

题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

    def searchInsert(self, nums: List[int], target: int) -> int:
        # 思路:二分查找法,复杂度O(log n) 
        # 返回插入的位置要分两种情况:1. List中有; 2. List中没有
        # 注意:python的List的index操作是O(1)复杂度。
        left = 0
        right = len(nums)-1

        if target < nums[left]:
            return 0
        if target > nums[right]:
            return right+1

        while left <= right:

            if target == nums[left]:
                return left
            if target == nums[right]:
                return right
            
            mid = floor(left + ( right - left ) / 2)
            print(mid)

            if target == nums[mid]:
                return mid
            elif target >= nums[mid]:
                left = mid + 1
            else:
                right = mid - 1
        if nums[right] > target:
            return right
        else:
            return right+1
278. 第一个错误的版本

题目:第一个错误的版本
输入:n = 5, bad = 4 [FFFTT]
输出:4

    def firstBadVersion(self, n):
        left, right = 1, n
        while left < right:
            mid = left + ( right - left ) / 2
            if isBadVersion(mid):
                right = mid
            else:
                left = mid + 1
        return int(left)

你可能感兴趣的:(LeetCode刷题笔记(十一)二分法)