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(二分查找)的主要内容,如果未能解决你的问题,请参考以下文章