給定乙個未排序的整數陣列,找出最長連續序列的長度。
要求演算法的時間複雜度為 o(n)。
示例:
輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。
找到一組數的集合,我們想一下可能有的方法,動態規劃?貌似沒有狀態轉移方程可以寫;滑動視窗?他不是連續的子陣列。
首先依然是暴力:遍歷每個數,找到每個數的時候,再遍歷陣列看看有沒有下個數,然後再遍歷,再看看有沒有下個數,三次迴圈就可以得到以每個數為起點的最長字段。ok我們發現,複雜度是o(n^3)。這是不可接受的。然後我們來進行優化。
我們在查詢每個數的下繼,例如得到2 ,那我們就要看看有沒有3。這種情況能不能進行優化?答案是可以的,用雜湊表。我們把每個數當成key值放進雜湊表,然後只要直接查詢該數是否存在即可。雜湊表的查詢複雜度是o(1)所以這裡就降低成為了o(n^2)。顯然還不夠,我們繼續優化。
public
intlongestconsecutive
(int
nums)
int longeststreak =0;
for(
int num : num_set)
longeststreak = math.
max(longeststreak, currentstreak);}
}return longeststreak;
}
時間複雜度:我們需要遍歷陣列,在形成最長連續序列中每個數都要遍歷一次
時間複雜度:o(n)空間複雜度:只需要乙個雜湊表
空間複雜度:o(n)
最長連續序列
題目 給定乙個未排序的整數陣列,找出最長連續序列的長度。例子 給出陣列 100,4,200,1,3,2 這個最長的連續序列是 1,2,3,4 返回所求長度 4。挑戰 要求你的演算法複雜度為o n 方法 將序列中的所有數存到乙個unordered set中。對於序列裡任意乙個數a i 我們可以通過se...
最長連續序列
給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 1,2,3,4 它的長度為 4。思路 用乙個字典儲存中間值遍歷陣列,對於數字i,找到的i 1和i 1的對應的值值,如果不存在則記為0。然後把我的值值設為i 1,i 1個的值值之和,並加1,相當於連線起來。同時置...
最長連續序列
給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。時間複雜度o n log n public intlongestconsecutive int nums a...