簡體   English   中英

給定兩個數組,找到更多的元素

[英]Given two arrays, find the number of elements greater

這是我在一家科技公司遇到的面試問題。 我弄錯了,我認為這注定了我的機會,但是老實說,我仍然找不到答案……這就是問題所在。 假設序列中的所有元素都是唯一的。

我們有兩個有限序列:X = {Xi},Y = {Yi}其中Yi是Xi的子序列。

讓我們將它們寫為單獨的數組:[X1,X2,...,Xn],[Y1,Y2,...,Yk]其中n是X的長度,k是Y的長度,並且顯然,因為Y是X的子序列,我們有n> = k。

例如

X=[1, 10, 5, 7, 11, -4, 9, 5]
y=[10, 7, -4, 9]

然后,對於Y中的每個元素,我們想找到X中元素的數量,其中1)出現在該元素之后, 2)大於該元素

使用上面的例子

X=[1, 10, 5, 7, 11, -4, 9, 5]
y=[10, 7, -4, 9]
ans=[1, 2, 2, 0]

explanation:

the first element of ans is 1 because only 11 appears after 10 and greater than 10 in X, 
so there's only 1 element

second element of ans is 2 since 11, 9 both appear after 7 in X, so there are 2 elements 
that appear after 7 and greater than 7. 

the third element of ans is also 2 since 9, 5 appear after -4 and are both greater than 
-4 in X. 

the fourth element is 0 since no element in X appears after and greater than 9.

面試官要我解決O(N)時間復雜性的問題,其中N是X的長度。我沒有找到解決方法。

有人有主意嗎?

如果有一個可以解決這個問題,然后通過設置算法Y = X ,你可以把它提供足夠的信息進行排序X沒有元素當中的任何進一步的比較X 因此,在通常的假設下,您不能在線性時間內執行此操作,即,您可以在固定時間內對其進行操作的X中的任意整數,但對其大小沒有常數限制。

您可以很容易地在O(N log N)時間內完成此操作,方法是向后瀏覽X並維護到目前為止看到的元素的順序統計樹。 參見https://en.wikipedia.org/wiki/Order_statistic_tree

我認為這不可能,不可能進行排序,這就是原因

為了解決這個問題,我們應將狀態保存在以前的計算中,以有限數量的變量表示,例如存儲加,減或乘。 所以,如果有一個很大的數字A ,那不是在B公司很清楚這不是有用的一切,我們已經知道的唯一可行的辦法是,以節省有限的變量之前的狀態,所以我們不能有只涉及數字A項目。

到目前為止,我們知道要解決的問題是我們應該弄清楚保存狀態算法,對於保存狀態,我們只能存儲一些表示Y當前元素的所有先前編號的數字,所有這些計算都無濟於事,因為我們不知道下一個Y項目(例如,當前數字是-1000 ,下一個數字是3000X其他數字是1,2,3)。 因此,由於這個原因,我們無法存儲與Y當前元素相關的任何存儲數字。 我們也不能有任何與Y不相關的數字(因為它完全有用)

暫無
暫無

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

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