給定一個輸入(值1)我需要在矢量(「vec」)中找到它的上限。我不需要返回上限值,而需要返回指向上限值的指針。使用二進制搜索搜索矢量的上限
vector<int> vec;
vec.push_back(5); vec.push_back(7); vec.push_back(15);
如果我的輸入值1 =「13」,那麼我的函數UPPERBOUND()應該返回指針元件15
UPPERBOUND()函數返回「pointerUpperBound」 - 這是一個指向所述上值1的界限。
我的情況的上界意味着一個大於或等於輸入值(值1)的值。它是大於輸入的最小數字
//**GOAL OF ALGORITHM: Given "value1" it needs to find value1's upper bound in vector "vec". Instead of return the upper bound element, I need to return pointer to upper bound element**
bool upperBound(int* &pointerUpperBound,int value1, vector<int> vec)
// Perform a binary search
{
unsigned left=0,right=(vec.size()-1);
int* l=&vec[0];
int* r=(l+vec.size()-1); //l will be start of pageInfo vector and r will be end of page info vector
if(vec.size()==1) //vec has just one element in it.
{
pointerUpperBound=l;
return true;
}
while (left!=right) {
int* pointerUpperBound=l+((r-l)/2);
unsigned middle=left+((right-left)/2);
if(value> (*pointerUpperBound)) {
l=pointerUpperBound+1;
left=middle+1;
} else if (!middle) { //reached the upper bound, it is "pointerUpperBound" which is also returned.
break;
} else {
int* prev=pointerToUpperBound;
prev--;
if(value1 > (*prev)) {
break;
} else{
right=middle;
r=pointerToUpperBound;
}
}
}
// Unsuccessful search?
if (left==right) {
return false;
}
}
我的算法沒有返回正確的上限。有人可以幫我弄清楚我哪裏錯了。
我只想用「指針」來遍歷這個向量。我不想使用內置函數來尋找上限 - 因爲我想知道我的算法出錯的地方。
你的功能(算法)應該做什麼? –
@KarolyHorvath鑑於「價值1」它需要找到value1的上限向量「vec」 –
然後什麼..?明確。 –