首页 > 其他分享 >关于二分

关于二分

时间:2024-05-30 12:00:06浏览次数:24  
标签:二分 target nums int mid bound 关于

  1. 第一种二分查找
  • 1)lower_bound函数,查找相同区间的第一个数的下标
int lower_bound(vector<int>& nums,int target)
{
	int l=0,r=nums.size()-1,mid;
	while(l<=r)//区间不为空
	{
		mid=l+(r-l)/2;//防止溢出
		if(nums[mid]<target)l=mid+1;//[mid+1, right],把小于目标的数字全部排除
		if(nums[mid]>=target)r=mid-1;//[left, mid-1],首先大于目标的数字全部排除
		//因为第二个if能够判断等于,又因为循环结束的标志为区间为空
		//所以right的位置结束的地方的数字一定小于target
		//所以结束的时候为r<l,即l的位置即为连续相同区间的第一个位置
	}
	return left;
}

  • 2)upper_bound函数查找相同区间的末尾的下标
int upper_bound(vector<int>& nums,int target)
{
	return lower_bound(nums, target+1)-1;
	//没错,利用上一个的基础二分去查找值target+1的数
	//尽管没有找到,返回的下标也是相同区间的下一位,此时pos-1就是区间结束的位置.
}

2. 第二种二分查找
int lower(vector<int>& nums, int target)
{
    int l=0,r=nums.size()-1,mid;
    while(l<r)
    {
        mid=(l+r)/2;
        if(nums[mid]==target)r=mid;
        if(nums[mid]<target)l=mid+1;
        if(nums[mid]>target)r=mid-1;
    }
    if(nums[l]==target)return l;
    return -1;
}

int upper(vector<int>& nums, int target)
{
    int l=0,r=nums.size()-1,mid;
    while(l<r)
    {
        mid=(l+r+1)/2;
        if(nums[mid]==target)l=mid;
        if(nums[mid]<target)l=mid+1;
        if(nums[mid]>target)r=mid-1;
     }
     return l;
}

标签:二分,target,nums,int,mid,bound,关于
From: https://www.cnblogs.com/STArunning/p/18220630

相关文章

  • 关于mysql explain中key_len
    key_len只指示了where中用于条件过滤时被选中的索引列,是不包含orderby、groupby这一部分被选中的索引列的。索引字段:没有设置NOTNULL,则需要加1个字节。定长字段:tinyint 占 1 个字节、int 占 4个字节、bitint 占 8 个字节、date 占 3个字节、datetime 占 5 ......
  • 关于mysql连表操作
    1createdatabasetest2;2usetest2;3CREATETABLEstudents(4student_idINT,5student_nameVARCHAR(50)6);78CREATETABLEcourses(9course_idINT,10student_idINT,11course_nameVARCHAR(50)12);1314INSERT......
  • 一本关于深入理解linux内核的书
    以下目录中所述关于深入理解linux内核:http://iteralink.top/resource/detail/7180573456050688000第一章走进Linux11.1GNU与Linux的成长 11.2Linux的开发模式和运作机制 21.3走进Linux内核 41.3.1Linux内核的特征 41.3.2Linux内核版本的变化 51.4......
  • 关于 IDEA 2023.3.1总管理配置maven路径
    先调出主页面,再选择主页面中的maven路径配置1、调出主页面. 在设置中搜索System,选中SystemSettings模块,取消Confirm和Reopen模块的勾选     2、重新启动进入主页面点击Customise中的Allsettings,进入总设置,在此进行maven配置即可......
  • 【Mac】关于Mac的github配置和本地项目上传
    目录前言什么是github?有什么用?github个人账户创建Mac的git环境配置生成密钥将密钥添加到github创建github仓库将本地文件上传至github仓库一些常用的git命令总结前言  本文主要介绍了Mac的git环境配置,github仓库的创建,本地文件上传到github仓库以及常用的git命......
  • P9 【力扣+知识点】【算法】【二分查找】C++版
    【704】二分查找(模板题)看到复杂度logN,得想到二分给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在......
  • 关于java的环境变量配置
    java概念1.sun,oraclejdk,openJdk2.jdk:javadevkit(java开发工具包)3.jre:jave运行时环境4.jvm:java虚拟机2.为啥要配置环境变量?让操作系统找到jave/bin目录位置,这样在任何目录都可以使用javecjavajavap,能够让依赖java的软件系统也能找到java配置环境变量:在w......
  • 关于Linux中延时函数的分析与实践(转)
    关于Linux中延时函数的分析与实践一、简介  在实际的工程实践中,面对需要程序短暂休眠的情况,我们通常想到的可能是sleep(),usleep(),nanosleep()等函数。但是,在最近阅读代码的过程中,经常会看到使用select()达到延时的目的。本着追根求源(钻牛角尖)的原则,本篇博文,旨在通过具体的实验......
  • 关于软件测试
    软件测试工具是确保软件质量和性能的重要手段。选择合适的测试工具,可以提高测试效率和效果,帮助团队更好地完成软件测试任务。请列举你所了解的测试工具答:测试管理工具——Xray:一个手动与自动化测试管理应用,专为质量保证而设计,能够无缝集成于Jira中,提供需求、测试、缺陷和执行......
  • 关于Interrupted system call 报错
    Socket编程或者其他的一些慢速系统调用中,我们经常会碰到“interruptedsystemcall”的问题。这些系统调用包括:长时间读取磁盘,等待网络连接i.e.Accept,阻塞的系统调用,i.e.Read/Writeepoll_wait/kevent这是因为系统调用在执行过程中有可能收到来自外部的信号中断,那么该系......