簡體   English   中英

以未排序的順序查找大於給定值的第一個數字

[英]Find the first number greater than a given one in an unsorted sequence

給定一個正整數序列和一個整數M,返回序列中第一個大於M的數字(如果不存在,則返回-1)。

示例:sequence = [2,50,8,9,1],M = 3 - > return = 50

需要的每個查詢的O(log n)(在預處理之后)。

我已經想到了BST,但是考慮到一個提升序列,我會得到一個很長的路徑,這不會給我O(logn)時間......

編輯:使用的結構也應該易於修改,即應該可以用給定的元素替換找到的元素並重復搜索另一個M(一切 - 除了預處理 - O(logn))。 當然,如果我可以將“第一個更大”更改為“第一個更小”並且不必在算法中進行太多改變,那就太好了。 如果它有幫助,我們可以假設所有數字都是正數而且沒有重復。

創建第二個數組(讓它為aux ),其中每個元素iaux[i] = max { arr[0],arr[1], ... ,arr[i]} (具有索引的所有元素的最大值) j <= i在原始數組中)。

很容易看出這個數組按性質排序,對aux的簡單二進制搜索將產生所需的索引。 (如果元素不存在,使用二進制搜索很容易得到比請求元素大的第一個元素)。

時間復雜度是每次查詢的O(n)預處理(僅執行一次)和O(logn)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM