前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python面试题-【二分法查找】给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。

python面试题-【二分法查找】给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。

作者头像
上海-悠悠
发布2022-07-19 12:47:10
7770
发布2022-07-19 12:47:10
举报

前言

给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。如果不是,返回索引按顺序插入时的位置。

题目

给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。如果不是,返回索引按顺序插入时的位置。 (用二分法查找解决) 示例 1: 输入: [1,3,5,6], 5 输出: 2

示例 2: 输入: [1,3,5,6], 2 输出: 1

示例 3: 输入: [1,3,5,6], 7 输出: 4

示例 4: 输入: [1,3,5,6], 0 输出: 0

二分法查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找的时候一定要是有序的数组。

二分法思想 1.首先从数组的中间元素开始查找,如果该元素正好是目标元素,则搜索结束,否则执行下一步。 2.如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤1的操作。 3.如果某一步数组为空,则表示找不到目标元素

如下图,数组中有目标元素,查找21

如下图,数组中没有目标元素,查找70

直到 low > high 查找失败

python3 二分法查找

python3 代码示例

代码语言:javascript
复制
from typing import List
"""
作者:上海-悠悠
QQ群:730246532
"""

class Solution:
    """
    二分法查找
    """
    def searchInsert(self, nums: List[int], target: int) -> int:
        low, high = 0, len(nums) - 1
        while low <= high:
            mid = low + (high-low) // 2
            if nums[mid] == target:
                return mid
            elif nums[mid] < target:
                low = mid + 1
            else:
                high = mid - 1
        return low  # 没找到则返回其位置左边的下标, 即为它按顺序插入的位置

if __name__ == '__main__':
    res1 = Solution().searchInsert([1, 3, 5, 6], 5)
    print(res1)
    res2 = Solution().searchInsert([1, 3, 5, 6], 7)
    print(res2)

以目标值为7示例 第一轮比较,mid 中间位置是数字3

target目标值7 大于中间数字3,所以第二轮比较

target目标值7 大于中间数字5,所以第三轮比较

由于第三轮比较target目标值7 大于中间数字6,此时low=mid=high了,依然满足while low <= high,所以还会有下一轮比较 此时low = mid + 1 循环结束,最终返回左边的下标 low

参考博客https://blog.csdn.net/weixin_43511031/article/details/122494815

2022年第 11 期《python接口web自动化+测试开发》课程,6月5号开学

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 题目
  • 二分法查找
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档