給定一個正整數序列和一個整數M,返回序列中大於M的第一個數字(如果不存在則返回-1) 。在未排序的序列中查找大於給定值的第一個數字
示例:序列= [2,50,8,9,1],M = 3 - >返回= 50
O(log n)的所需(預處理之後)每個查詢。
我想過BSTS的,但考慮到的遞增序列我會得到的只是一個長的路徑,這不會給我O(LOGN)時間...
編輯:二手結構也應該是容易修改,即應該可以用找到的元素替換找到的元素,然後重複搜索另一個M(除了預處理-O(logn))之外的所有內容。當然,如果我可以將'first first'更改爲'first small'並且不必在算法中改變太多,那就會很好。如果有幫助,我們可以假設所有數字都是正數,並且沒有重複。
如果對數字進行排序,則可以使用二分搜索。 –
更新:從示例中,它首先清楚!=最低。第一個=輸入中的第一個。 –
預處理有哪些數據?只有序列? –