• 从有序数组中查找某个值 low_bound


            二分搜索

    题意:

    给定长度为n的单调不下降数列a0, ...an-1和一个数k,求满足ai>=k条件的最小的i

    不存在的情况下输出n

    输入:

    5        3

    2 3 3 5 6

    输出:

    1

    #include <cstdio>
    using namespace std;
    
    int n, k;
    int a[1000000 + 10];
    
    void solve()
    {
        //初始化解的存在范围
        int lb = -1, ub = n;
    
        //反复循环。直到解的存在范围不大于1
        while (ub - lb > 1){
            int mid = (lb + ub) / 2;
            if (a[mid] >= k){
                //假设mid满足条件,则解的存在范围变为(lb, mid]
                ub = mid;
            }
            else{
                //假设mid不满足条件。则解的存在范围变为(mid, ub]
                lb = mid;
            }
        }
    
        //这时,lb + 1 = ub
        printf("%d
    ", ub);
    }
    
    int main()
    {
        scanf("%d%d", &n, &k);
        for (int i = 0; i < n; i++){
            scanf("%d", &a[i]);
        }
        solve();
        return 0;
    }
    
    //这样的算法被称为二分搜索。此外,STL以low_bound函数的形式实现了二分搜索。
    


  • 相关阅读:
    airflow 安装问题
    ACM-单词接龙
    ACM-AK吧!少年
    ACM-Alice and Bob
    ACM-Satellite Photographs
    ACM-Subset sum
    ACM-Special Array
    数据挖掘-回归分析
    数据库原理-数据库系统的结构
    数据库原理-几种数据模型
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7383416.html
Copyright © 2020-2023  润新知