given an unsorted array of integers, find the length of the longest consecutive elements sequence.
for example,
given[100, 4, 200, 1, 3, 2]
,
the longest consecutive elements sequence is[1, 2, 3, 4]
. return its length:4
.
your algorithm should run in o(n) complexity.
如果時間複雜度沒有要求的話思路很常見,先排序o(nlogn),然後從頭遍歷到尾,找到最長的連續序列就可以了。
但是這裡的時間複雜度要求是o(n)
實現思路需要做一些改變:我們先定義乙個map,遍歷一遍陣列,將(key, value)存入map,key是陣列中的每乙個數,value是1。
接著,我們再遍歷一遍陣列,對於當前遍歷的某個數 k,我們定義乙個值 index,index從k開始不停自增1,如果每次自增1後 index 依然可以在map中找到值,就說明陣列中存在k,k+1, k+2...這樣的連續序列;接著,index 從k開始不停自減1,直到map裡找不到這樣的index,這樣就找出了k-1, k-2, ...這樣的連續序列。我們將兩次計算找到的連續序列總長度len儲存下來。
遍歷到下乙個數時,依舊這樣做。最後找到len的最大值。
為了避免重複便利,map中已經訪問過的key可以設定為-1,當我們遍歷到陣列中某乙個值k時,如果map[k] == -1,說明k已經被計入過某乙個連續序列了,因此不用繼續計算。
因此,陣列所有的元素都被訪問兩次,總時間複雜度為o(2n)。
**:
classsolution
int maxlen = 0, len = 0
;
for(ite = num.begin(); ite != end; ++ite)
}return
maxlen;}};
一天一道Leetcode 單調數列
本篇推文共計2000個字,閱讀時間約3分鐘。題目描述 題目描述 如果陣列是單調遞增或單調遞減的,那麼這個陣列就是單調的陣列。如果對於所有i j,a i a j 那麼陣列 a 是單調遞增的。如果對於所有i j,a i a j 那麼陣列 a 是單調遞減的。當給定的陣列 a是單調陣列時返回 true,否則...
一天一道簡單題目(1)
給你乙個整型陣列,需要你返回兩個數,這兩個數相加等於乙個指定的數。你必須保證每乙個輸入的陣列都有且只有乙個確定的解。使用最笨的方法,用兩個迴圈巢狀,將這個陣列中所有的組合都測試一遍,直到最後得到正確的答案為止。private static string solve int arr,int targe...
013 一天一道C C 程式設計題
第13題 請編乙個函式void fun int tt m n int pp n tt指向乙個m行n列的二維陣列,求出二維陣列每列中最小元素,並依次放入pp所指一維陣列中。二維陣列中的數已在主函式中賦予。include using namespace std define m 5 define n 5...