要求:對於一個嚴格升序排列的數組,分別找出不小於特定值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 svec[low];
}
int main()
{
vector<int> svec;
for(int i = 0; i < 10; ++i)
svec.push_back( i + 1 );
for(int i = 0; i < 10; ++i)
cout << svec[i] << " ";
cout << endl;
cout << "The first value less than 5 is : ";
cout << GetLastValueLessThan( 5, svec ) << endl;
cout << "The first value greater than 5 is : ";
cout << GetFirstValueGreaterThan( 5, svec ) << endl;
return 0;
}