首页 > 其他分享 >二分搜索模板

二分搜索模板

时间:2024-03-06 11:11:28浏览次数:26  
标签:二分 right target nums mid 搜索 模板 left

目录

统一记忆为闭区间,只需要修改nums[mid]==target时收缩哪边边界,以及越界情况

最基本的二分搜索

def binary_search(nums:List[int],target:int):
    left=0
    right=len(nums)-1
    while(left<=right):
        mid=left+(right-left)//2
        if nums[mid]<target:
            left=mid+1
        elif nums[mid]>target:
            right=mid-1
        else:#mid所在位置的值等于target
            return mid
    return -1

寻找左边界的二分搜索

def left_bound(nums:List[int],target:int):
    left=0
    right=len(nums)-1
    while(left<=right):
        mid=left+(right-left)//2
        if nums[mid]<target:
            left=mid+1
        elif nums[mid]>target:
            right=mid-1
        else:#mid所在位置的值等于target
            right=mid-1#收缩右侧边界,锁定右边界
    #检查left越界情况
    if left>=len(nums) or nums[left]!=target:
        return -1
    return left

寻找右边界的二分搜索

def right_bound(nums:List[int],target:int):
    left=0
    right=len(nums)-1
    while(left<=right):
        mid=left+(right-left)//2
        if nums[mid]<target:
            left=mid+1
        elif nums[mid]>target:
            right=mid-1
        else:#mid所在位置的值等于target
            left=mid+1#收缩左侧边界,锁定右边界
    #检查right越界情况
    if right<0 or nums[right]!=target:
        return -1
    return right

标签:二分,right,target,nums,mid,搜索,模板,left
From: https://www.cnblogs.com/lushuang55/p/18056047

相关文章

  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
    704.二分查找https://leetcode.cn/problems/binary-search/description/一、左闭右闭`//左闭右闭publicstaticinterFen1(int[]nums,inttarget){if(target<nums[0]||target>nums[nums.length-1]){return-1;}intmaxIndex=nums.length-......
  • js 数组筛选方法使用整理_JavaScript常用数组元素搜索或过滤
    一、常用方案介绍:如果你想找到在符合特定条件的阵列中的所有项目,使用filter。如果你想检查是否至少有一个项目符合特定的条件,请使用find。如果你想检查一个数组包含一个特定的值,请使用includes。如果要在数组中查找特定项目的索引,请使用indexOf 二、js数组筛选方法......
  • 洛谷题单指南-搜索-P2895 [USACO08FEB] Meteor Shower S
    原题链接:https://www.luogu.com.cn/problem/P2895题意解读:所谓安全格子,就是在所有流星坠落之后,没有被烧焦的格子,要计算从起点到这些格子任一一个的最短路径,BFS可以解决。解题思路:1、读取数据,先把所有流星坠落点以及周围被烧焦的格子进行标记,得到安全格子2、从起点开始BFS,每走......
  • 体验el-select的远程搜索功能
    需求描述没有什么技术难度,需求如下,要求上来默认加载几个选项,然后根据用户的输入,实时更新选项,且支持用户新增。(请看gif)解决方案首先要找到了el-select组件,然后里面有一个远程搜索功能。官方文档:https://element-plus.org/zh-CN/component/select.html代码如下:<el-select......
  • 洛谷题单指南-搜索-P1135 奇怪的电梯
    原题链接:https://www.luogu.com.cn/problem/P1135题意解读:计算A到B至少要按几次电梯,本质上就是求A到B的最短路径,可以通过BFS解决。解题思路:位于每一层,有两种选择:向上、向下BFS搜索直接从A找到B,每扩展一层,层数+1,层数即按电梯次数100分代码:#include<bits/stdc++.h>usingnam......
  • WPF 样式与模板
    参考样式和模板如何为控件创建样式如何为控件创建模板ContentPresenter环境软件/系统版本说明WindowsWindows10专业版22H219045.4046MicrosoftVisualStudioMicrosoftVisualStudioCommunity2022(64位)-17.6.5Microsoft.NetSDK8.0.10......
  • P3369 【模板】普通平衡树
    原题链接题解1stl模拟,注意lowerbound的效果和pos的返回值code1#include<bits/stdc++.h>usingnamespacestd;vector<int>a;intmain(){intn;cin>>n;while(n--){intop,x;cin>>op>>x;if(op==1)a.inser......
  • C++U5-第06课-广度优先搜索3
    温故知新广搜的概念,编程实现基本流程 二进制矩阵中的最短路径]    【题意分析】找到一个从(0,0)到达(n-1,n-1)的路径并且路径上每一个数字都为0【思路分析】首先如果grid[0][0]=1,那么显然不存在最短路径,因此输出-1。使用dist[x][y]保存左上角单......
  • 洛谷题单指南-搜索-P1443 马的遍历
    原题链接:https://www.luogu.com.cn/problem/P1443题意解读:无论是国际象棋还是中国象棋,马的活动范围都是一样的:只不过国际象棋棋子是在格子中,中国象棋棋子是在交点,坐标的变化方式是一样的,根据此活动范围,计算马到达每一个点的最短路径。解题思路:根据马的活动范围,在棋盘内进行B......
  • 洛谷题单指南-搜索-P2392 kkksc03考前临时抱佛脚
    原题链接:https://www.luogu.com.cn/problem/P2392解题思路:参考https://www.cnblogs.com/jcwy/p/18003097前面已经给出了二进制法的代码,这里给出DFS的代码100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=25;ints1,s2,s3,s4;inta[N],b[N],c[......