我正在实施有效的算法来搜索(键或最近匹配(上限))的最后一次出现。
到目前为止,我得到了这个。
long bin_search_closest_match_last_occurance ( long * lArray, long sizeArray, long lnumber)
{
long left, right, mid, last_occur;
left = 0;
right = sizeArray - 1;
last_occur = -1;
while ( left <= right )
{
mid = ( left + right ) / 2;
if ( lArray[mid] == lnumber )
{
last_occur = mid;
left = mid +1;
}
if ( lArray[mid] > lnumber )
right = mid - 1;
else
left = mid + 1;
}
return last_occur!=-1?last_occur:mid;
}
让我们有一个数组{0,0,1,5,9,9,9,9}
,关键是6
Fce 应该返回 index 7
,但我的 fce 返回4
请注意,我不想线性迭代到最后一个匹配索引。
请记住,我有解决方案,我更改参数 fce(添加开始,结束索引)并使用 fce 从找到的上限到数组末尾进行另一次二进制搜索(仅当我没有找到完全匹配时last_occur==-1
)。
我想问是否有更好/更清洁的解决方案来实施它?