• lower_bound和upper_bound的实现和基本用法


      最近一直在学dp,但是感觉进度明显慢了很多,希望自己可以加一把劲,不要总是拖延了...

      在LIS的优化中我遇到了二分查找的问题,之前也知道lower_bound和upper_bound两个函数,但是没有做一个具体的总结,在下面我会总结这两个函数的用法,也会给出这两个函数的实现代码,代码是参考c ++ Reference 里面的...

    lower_bound:

      这个函数的头文件为#include <algorithm>,函数的返回值为一个指向单调序列[first, last) 中第一个不小于val的元素的地址,如果不存在满足条件的

    元素则返回NULL。你可以用该函数得到的指针的值减去数组开头元素的地址得到他在单调序列中的位置。

      下面解释一下该函数的几个参数:lower_bound(first, last, val);

      表示在有序序列[first, lase) 的所有值中,第一个不小于val的元素的地址。

      下面给出我自己对于lower_bound优化后实现的代码:有错误还请多多指出...

      该代码并没有返回指针,而是直接返回了下标......

    1 int lower_bound(vector<int> &a, int val) {
    2     int first = 0, last = a.size() - 1, mid;
    3     while(first <= last) {
    4         mid = last - (last - first) / 2;
    5         if(a[mid] >= val) last = mid - 1;
    6         else first = mid + 1;
    7     }
    8     return first;
    9 }

    upper_bound

      这个函数和上面的函数内容只有一点不同,他返回的是单调序列中第一个大于val的元素的地址,如果不存在满足条件的元素则返回NULL,下面再给出我自己写的版本......

    1 int upper_bound(vector<int> &a, int val) {
    2     int first = 0, last = a.size() - 1, mid;
    3     while(first <= last) {
    4         mid = last - (last - first) / 2;
    5         if(a[mid] <= val) first = mid + 1;
    6         else last = mid - 1;
    7     }
    8     return first;
    9 }
  • 相关阅读:
    词法分析程序
    大数据概述作业
    编译原理心得
    简化C语言文法
    解决:eclipse引入一个新项目所有jsp报错
    解决: 启动tomcat java.net.BindException: Address already in use: JVM_Bind错误
    myeclipse优化
    jquery冲突
    QQ上传大文件为什么这么快
    java中的重写和重载
  • 原文地址:https://www.cnblogs.com/bianjunting/p/10581368.html
Copyright © 2020-2023  润新知