【发布时间】:2015-01-23 09:05:02
【问题描述】:
我正在实施有效的算法来搜索(键或最近匹配(上限))的最后一次出现。
到目前为止,我得到了这个。
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 应该返回索引7,但我的 fce 返回4
请注意,我不想线性迭代到最后一个匹配索引。
请记住,我有解决方案,我更改参数 fce(添加开始,结束索引)并使用 fce 从找到的上限到数组末尾进行另一次二进制搜索(仅当我找不到完全匹配时,last_occur==-1) .
我想问是否有更好/更清洁的解决方案来实现它?
【问题讨论】:
-
不确定为什么它应该返回 7。它要求找到键的最后一次出现,或者最接近的匹配,所以如果键不在列表中(这是你的例子) - 返回 4 应该没问题,因为我理解任务描述。
-
@amit 编辑了这个问题。现在应该更清楚了
-
你在 while 指令之后打开一个 { 并且你永远不会关闭它。
-
@DanielDaranas 是的,对不起,错字
-
我不知道它为什么有用,但解决方案是运行两次上界搜索。
标签: c algorithm binary-search upperbound last-occurrence