zoukankan      html  css  js  c++  java
  • 从有序数组中查找某个值 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函数的形式实现了二分搜索。
    


  • 相关阅读:
    如何封装一个Ajax函数
    了解Ajax及Ajax如何发送请求
    jQuery的animate动画方法及动画排队问题解决
    jQuery的几种显示隐藏方法
    冲鸭!电瓶车
    Qt中使用HTTPS
    空非空
    河西走廊
    “财富自由”者之殇
    说鞋
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7383416.html
Copyright © 2011-2022 走看看