我正在實現有效的算法來搜索(密鑰或最近的匹配(上限))的最後一次出現。二進制搜索與最後一次匹配的最接近的匹配
到目前爲止,我得到了這一點。
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