Python编程题51--二分查找

2022-02-12  本文已影响0人  wintests

题目

给定一个含有 n 个无重复整数的升序列表 nums 和一个目标值 target ,请查找 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

例如:

给定一个列表 nums :[-1, 0, 3, 5, 9, 12],target = 9
返回结果:4

给定一个列表 nums :[-1, 0, 3, 5, 9, 12],target = 2
返回结果:-1

实现思路

在本题中说明了 nums 是一个有序列表,并且列表中元素无重复,因此我们可以考虑使用 二分查找 来实现。

我们可以发现,二分查找的逻辑其实不难,但它在实现过程中,涉及到不少边界条件,很容易弄乱,因此我们在实现过程中必须对变量的区间考虑清楚。

代码实现--while循环,非递归

class Solution:
    def binary_search(self, nums, target):
        left, right = 0, len(nums) - 1
        while left <= right:
            mid = (left + right) // 2
            if nums[mid] > target:
                right = mid - 1
            elif nums[mid] < target:
                left = mid + 1
            else:
                return mid
        return -1

代码实现--递归

class Solution:
    def binary_search(self, nums, target):
        return self.binary_search_recursive(nums, target, 0, len(nums) - 1)

    def binary_search_recursive(self, nums, target, left, right):
        if left > right:
            return -1
        mid = (left + right) // 2
        if nums[mid] > target:
            return self.binary_search_recursive(nums, target, left, mid - 1)
        elif nums[mid] < target:
            return self.binary_search_recursive(nums, target, mid + 1, right)
        else:
            return mid

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

上一篇 下一篇

猜你喜欢

热点阅读