前幾天我採訪了亞馬遜。我無法回答其中一個問題讓我滿意。我在面試後試圖得到答案,但到目前爲止我還沒有取得成功。這裏是問題:O(n)複雜度子段中最大值的最小值...
你有一個大小爲n的整數數組。您將獲得參數k
,其中k < n
。對於陣列中大小爲k
的連續元素的每個段,您需要計算最大值。您只需返回這些最大值的最小值。
例如給出1 2 3 1 1 2 1 1 1
和k = 3
答案是1
。
段將是1 2 3
,2 3 1
,3 1 1
,1 1 2
,1 2 1
,2 1 1
,1 1 1
。
每個段中的最大值是3
,3
,3
,2
,2
,2
,1
。
這些值中的最小值是1
因此答案是1
。
我想出的最佳答案是複雜度O(n log k)。我所做的是創建一個第一個k
元素的二叉搜索樹,在樹中獲取最大值並將其保存在變量minOfMax
中,然後使用數組中的其餘元素一次循環一個元素,刪除第一個元素在二叉搜索樹中的前一個分段中,將新分段的最後一個元素插入樹中,獲取樹中的最大元素,並將其與minOfMax
進行比較,並將minOfMax
中的最小值留在這兩者中。
理想的答案需要是複雜度O(n)。 謝謝。
很好的解決方案,但可怕的面試問題。要麼你對這個數據結構很熟悉,而且這個問題是微不足道的;或者你不是,這個問題是不可能的。 (除非你想假裝在面試過程中提出這個問題?)我想知道是否有更直接的方法,或者這只是一個蹩腳的面試問題。 – Nemo 2011-12-14 04:44:30
@ Nemo-我只知道如何解決這個問題,因爲我知道最小隊列數據結構,我只知道這一點,因爲我花了四個小時試圖弄清楚如何在看到基於最小疊加,這本身就是一個艱難的面試問題。我認爲可能有更簡單的方法來解決這個問題,但老實說,我不知道如何以其他方式解決這個問題。 – templatetypedef 2011-12-14 04:47:13