备战蓝桥杯【二分查找无bug版】

简介: 备战蓝桥杯【二分查找无bug版】
🌹作者:云小逸
📝个人主页: 云小逸的主页
📝Github: 云小逸的Github
🤟motto:要敢于一个人默默的面对自己, ==强大自己才是核心==。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟
👏专栏:C++👏 👏专栏:Java语言👏
👏专栏:C语言初阶👏👏专栏:数据结构👏

@TOC


前言

今天这一篇文章写的是==二分法的bug版==适用于任何情况,如有错误,请私信告知我,十分感谢ε≡٩(๑>₃<)۶ 一心向学在这里插入图片描述

——————————————————————————————

首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你
1.你过得快不快乐,只有你自己知道。其实谁都有一段不为人知的故事,其实谁都会脆弱的想要- -个停靠,其实谁都想和某个人完成曾经诺言,其实谁都能微笑然后转身流泪,其实谁都的生活都多少有那点苦涩,经历风雨。我只想要少一点悲伤悲伤,多一点快乐。我只想要少- -点孤独,多一点幸福。

2.不是所有的是非都能理清,不是所有的付出都有收获。有些选择是无可奈何,有些失去是注定的。与其无法言说,不如一-笑而过;与其无法释怀,不如安然自若。

3.所谓开心,就是眼睛向.上把快乐放大;所谓烦恼,就是眼睛向下把烦恼放大。

4.你若自信,就有微笑,你若看开,就有快乐,用纯净的眼光看世界,世界就是精彩的,用淡然的方式去生活,生活就是美好的,用平常的心态看得失,人生就是轻松的。

5.心存梦想,机遇就会笼罩着你;心存希望,幸福就会降临于你;心存坚持,快乐就会常伴你;心存真诚,平安就会跟随你;心存感恩,贵人就会青睐你;心存善念,阳光就会照耀你;心存美丽,温暖就会围绕你;心存大爱,崇高就会追随你;心存他人,真情就会回报你;美丽由心而定,心简单就会幸福!

二分查找【无bug版本】

二分查找法的思想在1946年提出的,第一个没有bug的二分查找法在1962年才出现。说明一个道理:真正的实现一个完全正确的算法是复杂的,只是思考算法的思想却是简单的。
在这里插入图片描述
借用acwing中y总的上课时的笔记:
在这里插入图片描述
**注:
1.mid=l+r>>1;其是否加上1与后面check的内容以及true时是l=mid还是r=mid;
2.check(mid)是指q[mid]大于或者小于x,x是要查找的数。
3.这里有一个便于记忆的口诀:“有减必有加,有加不用减”如:
如果r=mid-1;则mid=(l+r+1)>>1;
如果l=mid+1;则mid=(l+r)>>1;
这里的口诀便于理解与记忆。**

代码:

bool check(int x) {/* ... */} // 检查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;    // check()判断mid是否满足性质
        else l = mid + 1;
    }
    return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

例题:

题目:

给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。

对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。

如果数组中不存在该元素,则返回 -1 -1。

输入格式

第一行包含整数 n 和 q,表示数组长度和询问个数。

第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。

接下来 q 行,每行包含一个整数 k,表示一个询问元素。

输出格式

共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。

如果数组中不存在该元素,则返回 -1 -1。

数据范围

1≤n≤100000

1≤q≤10000

1≤k≤10000

输入样例:

6 3
1 2 2 3 3 4
3
4
5

输出样例:

3 4
5 5
-1 -1

代码:

#include<iostream>
using namespace std;

const int N=1e6+10;
int q[N];

int main()
{
    int n=0,m=0;
    scanf("%d%d",&n,&m);
    
    for(int i=0;i<n;i++) scanf("%d",&q[i]);
    
    while(m--)
    {
        int x=0;
        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;
}

在这里插入图片描述

最后

十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:

1.太多的事,慢慢地就不能做了;太多的人,渐渐地就不见了。成长似乎是一个丢失的过程。青春,就是注定了要颠簸,要有眼泪和汗水,有委屈、不甘和失败。后来,慢慢知道一切该发生的就是会发生,一切会错过的就是会错过。

2.趁自己还不老,走自己想走的路。没有理由,不去闯!时间,抓起了就是黄金,虚度了就是流水;理想,努力了才叫理想,放弃了那只是妄想!努力,虽然不一定会获得,但不努力,就一定一无所获。

3.趁自己还不老,走自己想走的路。没有理由,不去闯!时间,抓起了就是黄金,虚度了就是流水;理想,努力了才叫理想,放弃了那只是妄想!努力,虽然不一定会获得,但不努力,就一定一无所获。

4.我一直以为人是慢慢变老的,其实不是,人是一瞬间变老的。

5.随着年龄的增长,我们愈加发现,或许我们并不是失去了一些人,而是更加懂得到底谁才是最重要的人。

最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)

愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!

目录
相关文章
|
7月前
|
Python
【备战蓝桥杯】——循环结构
【备战蓝桥杯】——循环结构
54 1
|
算法 Java 测试技术
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(2)
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(2)
68 0
|
6月前
|
Java API
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
44 0
|
存储 人工智能 Java
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(1)
【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(1)
511 0
|
7月前
|
算法 安全 定位技术
【刷题】备战蓝桥杯 — dfs 算法
dfs算法在数据较小的情况下可以使用。 一定一定要确定好终止条件,避免栈溢出。 相应做好回溯,保证每次的遍历都是不一样的选择,避免少结果。 针对题目进行对应细节处理,有能力的话可以进行剪枝优化!!!
84 0
|
7月前
蓝桥杯备战刷题-滑动窗口
蓝桥杯备战刷题-滑动窗口
55 0
|
7月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
100 1
|
7月前
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
75 1
|
7月前
【备战蓝桥杯】——Day1
【备战蓝桥杯】——Day1
57 0
|
7月前
|
存储 算法
从0备战蓝桥杯:找出只出现一次的数字,数单身狗
从0备战蓝桥杯:找出只出现一次的数字,数单身狗
67 0
从0备战蓝桥杯:找出只出现一次的数字,数单身狗