1.4.10 #
解答 #
修改二分查找的结束条件,找到后仍然向左侧寻找,如果还能找到更小的,则返回较小的下标;否则返回当前下标。
代码 #
public static int Rank(int key, int[] a, int lo, int hi)
{
if (hi < lo)
return -1;
var mid = (hi - lo) / 2 + lo;
if (a[mid] == key)
{
var mini = Rank(key, a, lo, mid - 1);
if (mini != -1)
return mini;
return mid;
}
if (a[mid] < key)
{
return Rank(key, a, mid + 1, hi);
}
return Rank(key, a, lo, mid - 1);
}