二分查找Binary_Search
  ve858WFqcITf 2023年11月01日 362 0

 

/*Binary_Search_int.cpp*/
#include<bits/stdc++.h>
using namespace std;

/*
1、建模:划分蓝红区域,确定IsBlue()
2、确定返回l还是r
3、套用算法模板
4、(后处理...)
*/

//模板
bool check(int mid){// 检查mid是否满足某种性质
    return true;
}

int BinarySearch(int n){
    int l = -1;
    int r = n;
    int mid;
    while(l+1 != r){
        mid = r + (l-r)/2;  //防int溢出
        if (check(mid))l = mid;    //根据实际情况设计函数
        else r = mid;
    }
    return l; //根据实际情况返回l或者r
}

/*例子*/
vector<int> arr = {1,2,3,5,5,5,8,9};

int BinarySearch01(int x){
    int l = -1, r = arr.size(),mid;
    while(l+1 != r){
        mid = r + (l-r)/2;
        if(arr[mid]<x) l = mid;
        else r = mid;
    }
    return l;
}

int BinarySearch02(int x){
    int l = -1, r = arr.size(),mid;
    while(l+1 != r){
        mid = r + (l-r)/2;
        if(arr[mid]<x) l = mid;
        else r = mid;
    }
    return r;
}

int BinarySearch03(int x){
    int l = -1, r = arr.size(),mid;
    while(l+1 != r){
        mid = r + (l-r)/2;
        if(arr[mid]<=x) l = mid;
        else r = mid;
    }
    return l;
}

int BinarySearch04(int x){
    int l = -1, r = arr.size(),mid;
    while(l+1 != r){
        mid = r + (l-r)/2;
        if(arr[mid]<=x) l = mid;
        else r = mid;
    }
    return r;
}

int main(){
    cout<<BinarySearch01(5)<<endl;//找到最后一个<5的元素      输出2
    cout<<BinarySearch02(5)<<endl;//找到第一个>=5的元素       输出3
    cout<<BinarySearch03(5)<<endl;//找到最后一个<=5的元素     输出5
    cout<<BinarySearch04(5)<<endl;//找到第一个>5的元素        输出6
    return 0;
}

 

/*Binary_Search_double.cpp*/
#include<bits/stdc++.h>
using namespace std;

bool check(double x){// 检查x是否满足某种性质
} 
double bsearch_double(double l, double r){
    const double eps = 1e-6;   // eps 表示精度,取决于题目对精度的要求(英文全称为epsilon,其来源为希腊字符ε的读音)
    while (r - l > eps){
        double mid = (l + r) / 2;
        if (check(mid)) r = mid;
        else l = mid;
    }
    return l;
}

int main(){

    return 0;
}

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jTMfQq5cr55P   2024年05月17日   44   0   0 算法与数据结构
  jTMfQq5cr55P   2024年05月17日   40   0   0 算法与数据结构
ve858WFqcITf