数据结构与算法———力扣704——二分查找——python

数据结构与算法———力扣704——二分查找——python_第1张图片
整体思路如下:
理解题意:整个数组是 从小到大,从左往右,这就是升序。

二分法思路:
例子:在100以内的整数随机挑一个数出来,对方让你猜是多少,最快最稳妥的方式就是二分法。
直接猜 这个数是不是50,如果不是,那大于50还是小于50,对方会告诉你大于或者小于,这样一定会又快又稳。

程序思路:
设定一个范围,大值与小值(相当于上个例子里的0~100),进行二分,得到当前值(就相当与上面例子里的50),先看是否等于目标值,再看是大于还是小于目标值。如果当前值大于目标值,说明范围大了,以当前大值为边界,继续二分,因为当前值已经大于目标值,那就可以将范围再缩减1格,聊胜于无。小于的话就相反喽。

class Solution:
    def search(self, nums: List[int], target: int) -> int:
    	# 设定一个区间范围 大值与小值 注意最大值使用len()需要-1 否则就会数组越界
        min1, max1 = 0, len(nums) - 1
        # 设定一个循环条件
        while min1 <= max1:
        	# 进行二分  范围的一半  注意:因为小值也会移动的 所以要加上它
            mid = (max1 - min1) // 2 + min1
            # 如果找到了,就返回 数组的索引
            if nums[mid] == target:
                return mid
            # 如果 当前值 大于 目标值
            elif nums[mid] > target:
            	# 改范围:将大值 定为 当前值 - 1  
                max1 = mid - 1
            else:
            	# 改范围:将小值 定为 当前值 + 1
                min1 = mid + 1
        # 如果循环结束也没找到,那就没有了
        return -1

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