zoukankan      html  css  js  c++  java
  • STL 二分查找 upper_bound和lower_bound用法

    STL中关于二分查找的函数有三个lower_bound 、upper_bound 、binary_search 。
    这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数。

    ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

    ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于值val的位置。

    lower_bound和upper_bound如下图所示:
    这里写图片描述

    1.lower_bound函数源代码:

    int lower_bound(int *array,int size,int key)
    {
        int first=0,middle;
        int half,len;
        len=size;
        while(len>0)
        {
            half=len>>1;
            middle=first+half;
            if(array[middle]<key)
            {
                first=middle+1;
                len=len-half-1;///在右边子序列中查找
            }
            else
                len=half;///在左边子序列(包含middle)中查找
        }
        return first;
    }

    2.upper_bound函数源代码:

    int upper_bound(int *array,int size,int key)
    {
        int len=size-1;
        int half,middle;
        while(len>0)
        {
            half=lem>>1;
            middle=first+half;
            if(array[middle]>key)///中位数大于key,在包含last的左半边序列中查找。
                len=half;
            else
            {
                first=middle+1;///中位数小于等于key,在右半边序列中查找。
                len=len-half-1;
            }
        }
        retrurn first;
    }
  • 相关阅读:
    763. 划分字母区间(贪心算法)
    1282. 用户分组(贪心算法)
    698. 划分为k个相等的子集
    560. 和为K的子数组
    面试题 16.10. 生存人数
    Python:对列表进行排序并相应地更改另一个列表?
    数据竞赛总结
    面试提问之请你介绍一下xxx方法
    常用数学符号读法
    round() 函数
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7899991.html
Copyright © 2011-2022 走看看