C++ STL中的Binary search(二分查找)

Posted ysysys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ STL中的Binary search(二分查找)相关的知识,希望对你有一定的参考价值。

左闭右开写法

  • 查找某个元素是否出现。
int binarySearch(vector<int>& nums, int target)
{
    int left = 0;
    int right= nums.size();
    int mid = 0;
    //[left, mid) mid [mid+1, right)
    while(left< right)
    {
        mid = (right - left) / 2 + left;
        if(nums[mid] == target) return mid;
        if(nums[mid] < target) left = mid + 1;
        if(nums[mid] > target) right = mid;      
    }
    return -1; //未找到target
}
  • 查找第一个大于或等于某个元素的位置
int lowerBound(vector<int> &nums, int target) {
    int left = 0;
    int right = nums.size();
    int mid = 0;
    while(left < right)
    {
        mid = (right - left) / 2 + left;
        if (nums[mid] >= target) {
            right = mid;
        } else {
            left = mid + 1;
        }
    }
    return left;
}
  • 查找第一个大于某个元素的位置。
int upperBound(vector<int> &nums, int target) {
    int left = 0;
    int right = nums.size();
    int mid = 0;
    while(left < right)
    {
        mid = (right - left) / 2 + left;
        if (nums[mid] > target) {
            right = mid;
        } else {
            left = mid + 1;
        }
    }
    return left;
}

以上是关于C++ STL中的Binary search(二分查找)的主要内容,如果未能解决你的问题,请参考以下文章

STL之二分查找 (转载)

C++之binary_search二分查找算法

我在哪里可以获得“有用的”C++ 二分搜索算法?

stl 二分

STL二分算法

STL二分算法