力扣leecode-python解法笔记之704. 二分查找

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left_point = 0
        right_point = len(nums)-1
    
        while left_point <= right_point: # 第一个易错点 此时是左闭右闭区间 =时也要查找一次
            middle_point = left_point + round((right_point - left_point)/2)

            if target == nums[middle_point]:
                return middle_point
            elif target < nums[middle_point]:
                right_point = middle_point - 1  # 第二个易错点 在结果应该在mid左边时
                                                # mid点已经查找过一次了 需要跳过此时的mid点本身
            else:
                left_point = middle_point + 1   # 易错点同上

        return -1

704. 二分查找 - 力扣(LeetCode)

二分查找入门题:

逻辑是先找到中间点,如果中间点和target相同,则返回中间点的坐标。如果target更小则把中间点改为下一次查找的右边界。如果更大,则把中间点改为下一次查找的左边界。

一刷的代码展示的是 查找区间左闭右闭的情况。

二刷:
计算中间点时直接使用地板除,向下取整即可: m = (left + right)//2

middle_point = left_point + round((right_point - left_point)/2)
这个写法主要是因为java,c++等语言,为了防止溢出写的。

你可能感兴趣的:(leetcode,算法,职场和发展)