首页 > 其他分享 >二分查找

二分查找

时间:2023-04-17 23:14:32浏览次数:32  
标签:二分 right target nums int middle 查找 left

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

python

解一:

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        if target in nums:
            return nums.index(target)
        else:
            return -1

解二:

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        left = 0
        right = len(nums)
        while(left < right):
            middle = (left + right)//2
            if nums[middle] < target:
                left = middle + 1
            elif nums[middle] >target:
                right = middle
            elif :
                return middle
        return -1

解二

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        left = 0
        right = len(nums)-1
        while(left <= right):
            middle = (left + right)//2
            if nums[middle] < target:
                left = middle + 1
            elif nums[middle] >target:
                right = middle - 1
            else:
                return middle
        return -1

C

笔记

  1. 二分查找需要注意对区间的定义:target所在区间可能为[a,b),也可能为[a,b],当使用左闭右开区间时,右端点是没有意义的,因此left < right , right = middle,而在使用闭区间时,右端点有意义,因此left <= right , right = middle -1 ,这也是解二和解三的区别;
  2. python中index()方法,可以查找列表中对应元素的位置,除了代码中用法外,还可以给它第二、三个参数,例如nums.index(target,2,4) ,使其从列表中第2个元素开始找target对应索引到第4个元素处停止(序号从0开始)。

标签:二分,right,target,nums,int,middle,查找,left
From: https://www.cnblogs.com/zhiyue-bit/p/17327898.html

相关文章

  • 【LBLD】常数时间删除-查找数组中的任意元素
    常数时间删除-查找数组中的任意元素380.O(1)时间插入、删除和获取随机元素classRandomizedSet{private:vector<int>nums;unordered_map<int,int>num2index;public:RandomizedSet(){srand(time(0));}boolinsert(intval){......
  • 查找自己农历生日与公历生日在同一天的年份
    #请先使用命令pipinstallsxtwl安装依赖库后,再执行以下脚本importsxtwlymc=["正","二","三","四","五","六","七","八","九","十","冬","腊"]rmc=[&quo......
  • 查找消耗cpu最高的Java进程
    #!/bin/bashif[-z"$1"];then###1.先找到消耗cpu最高的Java进程###pid=`ps-eopid,%cpu,cmd--sort=-%cpu|grepjava|grep-vgrep|head-1|awk'END{print$1}'`if["$pid"=""];then......
  • linux系统查找文件命令find,xargs
    FIND命令形式:findpathname-options[-print-exec-ok]pathname要查找的路径(.表示当前目录,/表示系统根目录)-print输出-exec 对匹配的文件执行该参数所给出的shell命令-execrm{}\;注意{}和\;之间的空格-ok以一种更为安全的模式来执行shell命令find命令有很多选项或表达式,每一......
  • 二分查找
    经典二分查找,给定一个升序的整形数组nums和一个目标值target,查找target在nums中的位置,如果目标值存在返回下标,否则返回-1publicclassSolution{publicintSearch(int[]nums,inttarget){returnBinarySearch(nums,0,nums.Length-1,target);}......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之004 week01 02-04 使用泛型实现线性
    1、算法描述在数组中逐个查找元素,即遍历。2、上一篇文的实现结果在扎实打牢数据结构算法根基,从此不怕算法面试系列之003week0102-03代码实现线性查找法中,我们实现了如下代码:packagecom.mosesmin.datastructure.week01.chap02;/***@Misson&Goal代码以交朋友、传福音......
  • 如何对数据透视表的数据进行查找
    问题:如果对数据透视表中的数据进行查找,例如找到每个店员和店铺对应的服务费。函数解决:直接对数据透视表的数据源进行多条件求和。=SUMIFS(C:C,A:A,H2,B:B,I2)更改数据透视表布局后再用Sumifs或查找函数: ......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之002 week01 02-02 线性查找法
    1、线性查找法什么是线性查找法?举例:在一沓试卷中,找到属于自己的那张试卷。第1张:不是第2张:不是第3张:不是……第n张:是,找到了!第n+1张:不找了……这个解决问题的思路和过程体现就是线性查找法的思想。2、线性查找法思路梳理线性查找法,就是在线性的数据结构中来完成。例......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之003 week01 02-03 代码实现线性查找
    1、算法描述在数组中逐个查找元素,即遍历。2、思路原理如算法描述,基本是最简单的代码块了,没有什么额外的原理。3、初步的代码实现线性查找法初步的代码实现:packagecom.mosesmin.datastructure.week01.chap02;/***@Misson&Goal代码以交朋友、传福音*@ClassNameLinea......
  • 如何自行查找出 SAP ABAP 标准的 OData 服务返回数据的后台数据库表和表字段名称
    笔者的知识星球有朋友提问,询问如何查找一个SAPABAPOData服务,暴露出的字段到底来自SAPABAP后台哪些数据库表的哪些字段。要回答这个问题,需要综合运用到我们过去学过的包括ABAP后台程序单步调试的知识。本文我们还是通过之前使用过的SAPCRM标准的Fiori应用,MyAccoun......