首页 > 编程语言 >整数二分算法(自用)

整数二分算法(自用)

时间:2024-02-29 21:57:24浏览次数:30  
标签:二分 int mid 边界点 算法 自用 数组 else

1.思想

对于一个已排序数组,找到一个点,使得数组被分为两部分,即此点左部和右部(点在左部或右部中的一个),比如数组中小于等于某数x的部分与大于的部分;

对于整数二分而言两个范围之间是没有空隙的,即左部分的边界x的下一个数一定在右部分。我们可以根据题目选择多种方法二分数组,大类上分为两种,寻找大于等于的边界点,寻找小于等于的边界点。具体代码如下。

 

  

2.具体代码

通用模板记住就行!

寻找的边界点属于数组大于等于x的部分

//区间[l,r]被划分成为[l,mid]和[mid+1,r]时:
int bsearch_1(int l,int r)
{
    while (l < r)
    {
	    int mid = l + r >> 1;
	    if (check(mid))r = mid;
	    else l = mid + 1;

    }
    return l;

}

寻找的边界点属于数组小于等于x的部分

//区间[l,r]被划分成为[l,mid-1]和[mid,r]时:
int bsearch_1(int l,int r)
{
    while (l < r)
    {
	    int mid = l + r + 1 >> 1;
	    if (check(mid))l = mid;
	    else r = mid - 1;

    }
    return l;

}

3.应用

题目链接

#include<iostream>

using namespace std;

const int N = 100010;

int n,m;
int q[N];

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)scanf("%d",&q[i]);
    
    while(m--)
    {
        int x;
        scanf("%d",&x);
        
        int l=0,r=n-1;
        while(l<r)
        {
            int mid=l+r>>1;
            if(q[mid]>=x)r=mid;
            else l=mid+1;
            
        }
        if(q[l]!=x)cout<<"-1 -1"<<endl;
        else
        {
            cout<<l<<" ";
            int l=0,r=n-1;
            while(l<r)
            {
                int mid=l+r+1>>1;
                if(q[mid]<=x)l=mid;
                else r=mid-1;
            }
            cout<<l<<endl;
        }
        
    }
    return 0;
}

 

标签:二分,int,mid,边界点,算法,自用,数组,else
From: https://www.cnblogs.com/LQWUI/p/18045601

相关文章

  • 二分
    二分查找模板总结二分查找是一种在有序数组中查找某一特定元素的搜索算法。元素集合有顺序,元素性质有分界点,二分法就可以用来求分界点,并不一定要求集合中元素是不重复的。算法思路:假设目标值在闭区间[left,right]中,每次将区间长度缩小一半,当left=right时,我们就找到了......
  • 洛谷题单指南-二分查找与二分答案-P1678 烦恼的高考志愿
    原题链接:https://www.luogu.com.cn/problem/P1678题意解读:要计算不满意度之和的最小值,就要保证每个人的不满意度最小,即选择的学校录取分数-学生分数之差的绝对值最小。解题思路:如何在学校录取分数中找与学生分数最接近的呢?有三种可能:1、学生分数在录取分数中存在相等的2、学......
  • 智能分析网关V4电瓶车检测与烟火算法,全面提升小区消防安全水平
    2024年2月23日,南京市某小区因电瓶车停放处起火引发火灾事故,造成巨大人员伤亡和损失。根据国家消防救援局的统计,2023年全国共接报电动自行车火灾2.1万起。电瓶车火灾事故频发,这不得不引起我们的重视和思考,尤其是在小区的管理中,电瓶车安全监管更是重中之重。随着科技的快速发展,AI视......
  • AI智能分析网关V4车辆违停算法在园区场景中的应用及特点
    随着城市化进程的加速,车辆违停问题愈发严重,给城市交通带来了极大的困扰。为了解决这一问题,AI技术逐渐被应用于车辆违停的检测中。AI检测算法在车辆违停方面的应用,主要是通过计算机视觉技术,对道路上的车辆进行实时监控和识别。通过图像处理和深度学习等技术,AI可以自动识别车辆是否......
  • AI智能分析网关V4:抽烟/打电话/玩手机行为AI算法及场景应用
    抽烟、打电话、玩手机是人们在日常生活中常见的行为,但这些行为在某些场合下可能会带来安全风险。因此,对于这些行为的检测技术及应用就变得尤为重要。今天来给大家介绍一下TSINGSEE青犀AI智能分析网关V4抽烟/打电话/玩手机检测算法及其应用场景。将监控现场部署的摄像头接入到AI......
  • 文心一言 VS 讯飞星火 VS chatgpt (204)-- 算法导论15.3 3题
    三、考虑矩阵链乘法问题的一个变形:目标改为最大化矩阵序列括号化方案的标量乘法运算次数,而非最小化。此问题具有最优子结构性质吗?需要写代码的时候,请用go语言。文心一言,代码正常运行:首先,我们要明确矩阵链乘法问题的原始形式:给定一个矩阵链(A_1,A_2,\ldots,A_n),我们要找到......
  • 代码随想录算法训练营第三十一天 | 53. 最大子序和, 376. 摆动序列,455.分发饼干
    455.分发饼干 已解答简单 相关标签相关企业 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] ......
  • 基于最小二乘正弦拟合算法的信号校正matlab仿真,校正幅度,频率以及时钟误差,输出SNDR,
    1.算法运行效果图预览    2.算法运行软件版本matlab2022a 3.算法理论概述        在信号处理领域,正弦信号是一种常见且重要的信号形式。然而,在实际应用中,由于各种噪声和失真的影响,正弦信号的幅度、频率和相位可能会发生偏差。为了准确地恢复和分析这些信......
  • TSINGSEE青犀AI智能分析网关V4区域入侵检测算法及应用介绍
    区域入侵检测算法主要应用于需要高度安全防护的场所,如:电力、水利、石油等国家基础设施场所;政府机关、军事基地等重要设施;监狱、看守所等监管场所;大型企业、工厂等生产区域;校园、住宅小区、楼宇等。这些场所通常具有明确的周界警戒区域,需要对非法入侵行为进行实时监测和预警。TSI......
  • m基于深度学习的16QAM调制解调系统相位检测和补偿算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要        随着通信技术的飞速发展,高阶调制格式如16QAM(16-QuadratureAmplitudeModulation,16进制正交幅度调制)在高速数据传输中得到了广泛应用。然而,由于信道失真、噪声干扰等因素,接收端往往面临相......