我正在实现有效的算法来搜索(密钥或最近的匹配(上限))的最后一次出现。二进制搜索与最后一次匹配的最接近的匹配
到目前为止,我得到了这一点。
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 2014-11-25 11:36:40
@amit编辑了这个问题。现在应该更清楚了 – Rob 2014-11-25 11:41:49
你打开一个{在你的while指令之后,你永远不会关闭它。 – 2014-11-25 11:44:56