[英]find the first longest ascending or descending sub-sequence in a given unsorted sequence by C++
[英]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
),其中每個元素i
: aux[i] = max { arr[0],arr[1], ... ,arr[i]}
(具有索引的所有元素的最大值) j <= i
在原始數組中)。
很容易看出這個數組按性質排序,對aux
的簡單二進制搜索將產生所需的索引。 (如果元素不存在,使用二進制搜索很容易得到比請求元素大的第一個元素)。
時間復雜度是每次查詢的O(n)
預處理(僅執行一次)和O(logn)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.