首页 > 其他分享 >二分查找——区间开闭性

二分查找——区间开闭性

时间:2023-03-14 23:48:21浏览次数:39  
标签:二分 right mid 开闭 查找 右闭 写法 左闭 left

具体到代码上,二分查找时区间的左右端取开区间还是闭区间在绝大多数时候都可以,因此
有些初学者会容易搞不清楚如何定义区间开闭性。这里我提供两个小诀窍,第一是尝试熟练使用
一种写法,比如左闭右开(满足C++、Python 等语言的习惯)或左闭右闭(便于处理边界条件),
尽量只保持这一种写法;第二是在刷题时思考如果最后区间只剩下一个数或者两个数,自己的写
法是否会陷入死循环,如果某种写法无法跳出死循环,则考虑尝试另一种写法

 

下面是区间开闭性的总结

三种写法:left和right最初的取值

①左闭右闭:left=0,right=numSize-1

②左闭右开:left=0,right=numSize

③左开右闭:left=-1,right=numSize-1

 

三种写法:left和right索引时的偏移

①左闭右闭:left = mid + 1, right = mid - 1

②左闭右开:left = mid + 1, right = mid

③左开右闭:left = mid, right = mid - 1

 

三种写法:while里的循环条件

①左闭右闭:left <= right

②左闭右开:left < right

③左开右闭:left < right

 

三种写法:mid的取值

①左闭右闭:mid = left + (right - left) / 2 或者 mid = left + (right - left + 1) / 2

②左闭右开:mid = left + (right - left) / 2

③左开右闭:mid = left + (right - left + 1) / 2

参考:https://blog.csdn.net/m0_63303316/article/details/123780707

 

标签:二分,right,mid,开闭,查找,右闭,写法,左闭,left
From: https://www.cnblogs.com/spacerunnerZ/p/17216926.html

相关文章

  • 拆办(二分)查找算法
    该代码可以实现在一个有序数的序列中查找到我们需要的一个数,使用的算法是拆办(二分)查找算法#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>intmain()......
  • 二分图匹配(匈牙利算法和KM算法)
    二分图匹配对于一个二分图,其匹配是一个边的集合,每条边不应用重复的点它有一个匹配,为图中红色线段但这个匹配不是(边数)最大的,因此不是最大匹配匈牙利算法匈牙利算法......
  • 力扣 (LeetCode)刷题--704. 二分查找
    二分查找是一个非常基础的算法给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示......
  • HJ60 查找组成一个偶数最接近的两个素数
      importsysn=int(sys.stdin.readline().strip())sp=n//2l=range(sp+2)[::-1]check=1su=0j=2defchech_su(i):check=1j=2ifi==2ori==3:......
  • 800. 数组元素的目标和(双指针,二分)
    https://www.acwing.com/problem/content/802/二分:枚举a,对于每一个a[i],都二分一下求x-a[i],是否在b数组中#include<iostream>usingnamespacestd;constintN=1......
  • 二分查找法
    二分查找法functionbinarySearch($arr,$val,$hight,$low=0){$i=0;while($low<=$hight){$i++;$mid=ceil(......
  • NXP S32K312从零开发资源查找记录
    首先就是下载开发环境(40条消息)小猫爪:S32K3学习笔记01-S32K3RTD【MCAL&SDK】的使用和环境搭建_mcal开发sdk开发_小猫爪的博客-CSDN博客上述网址在安装S32DS.3.4_b201......
  • 在 Linux 中如何查找父进程 PPID?
    导读内核创建的进程称为“父进程”。从父进程派生或产生的进程称为“子进程”。父进程可能由多个子进程组成,每个子进程都具有唯一的PID(进程ID)但共享相同的PPID。......
  • LeeCode例题——二分查找
    1.二分查找:(面对一个升序排列的数组)classSoulution{public:intsearch(vector<int>&nums,inttarget){//函数名(数组,变量)intleft=0,right=nums.size()-......
  • 用python编写程序,使用筛选法查找并输出小于1000的所有素数
    #创建一个布尔数组,其中的值都是True,数组下标为i表示数字i是否为素数prime=[Trueforiinrange(1000)]#0和1不是素数,因此将它们的值设置为Falseprime[0]=Falseprim......