一天一道leetcode4

2021-08-05 23:07:55 字數 1064 閱讀 4955

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)。

**:

class

solution

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...