我正在实现一个找到 A[i] = i 的固定点的函数。
size_t find_fixed_point(const vector<int>& list)
{
auto lower = list.begin();
auto upper = list.end() - 1;
while (lower < upper)
{
auto mid = lower + (upper-lower)/2;
if ( *mid <= (mid - list.begin()) )
{
// keep searching on left side
upper = mid;
}
else
{
// keep searching on right side
lower = mid + 1;
}
}
return lower - list.begin();
}
所以如果我将它应用于以下向量
vector<int> numbers = {-10, -5, 1, 3, 13, 13, 50, 70};
和
auto temp = find_fixed_point(numbers);
cout << numbers[temp];
它应该给 3 作为固定点,但它只给我 -10 是行不通的。
该算法看起来不错,但它不起作用。有人有想法吗?谢谢,