要求:对于一个严格升序排列的数组,分别找出不小于特定值x的第一个数和不大于x的最后一个数
例:1 2 3 4 5 6 7 8 9 10
不小于x=5的第一个数为:5
不大于x=5的最后一个数也为:5
#include <iostream>
#include <vector>
using namespace std;
int GetLastValueLessThan(int v, vector<int>& svec)
{
int low = 0, high = svec.size() - 1;
while( low <= high )
{
int mid = (low + high) >> 1;
/* 如果要求查找严格小于x的第一个数,将改为svec[mid] >= v*/
if( svec[mid] > v )
high = mid - 1;
else low = mid + 1;
}
return svec[high];
}
int GetFirstValueGreaterThan(int v, vector<int>& svec)
{
int low = 0, high = svec.size() - 1;
while( low <= high )
{
int mid = (low + high) >> 1;
/* 如果要求查找严格大于x的最后一个数,将改为svec[mid] > v*/
if( svec[mid] >= v )
high = mid - 1;
else low = mid + 1;
}
return sve