程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Longest Consecutive Sequence -- LeetCode

Longest Consecutive Sequence -- LeetCode

編輯:C++入門知識

原題鏈接: http://oj.leetcode.com/problems/longest-consecutive-sequence/
這道題是要求出最長的整數連續串。我們先說說簡單直接的思路,就是先排序,然後做一次掃描,記錄當前連續串長度,如果連續串中斷,則比較是否為當前最長連續串,並且把當前串長度置0。這樣時間復雜度是很明確,就是排序的復雜度加上一次線性掃描。如果不用特殊的線性排序算法,復雜度就是O(nlogn)。
其實這個題看起來是數字處理,排序的問題,但是如果要達到好的時間復雜度,還得從圖的角度來考慮。思路是把這些數字看成圖的頂點,而邊就是他相鄰的數字,然後進行深度優先搜索。通俗一點說就是先把數字放到一個集合中,拿到一個數字,就往其兩邊搜索,得到包含這個數字的最長串,並且把用過的數字從集合中移除(因為連續的關系,一個數字不會出現在兩個串中)。最後比較當前串是不是比當前最大串要長,是則更新。如此繼續直到集合為空。如果我們用HashSet來存儲數字,則可以認為訪問時間是常量的,那麼算法需要一次掃描來建立集合,第二次掃描來找出最長串,所以復雜度是O(2*n)=O(n),空間復雜度是集合的大小,即O(n)。代碼如下:

public int longestConsecutive(int[] num) {
    if(num == null || num.length == 0)
        return 0;
    HashSet set = new HashSet();
    int res = 1;
    for(int i=0;ires)
            res = len;
    }
    return res;
}
這是一個非常不錯的題目,有比較好的算法思想,看起來是一個排序掃描的題目,其實想要優化得借助圖的算法,模型也比較簡單,很適合在面試中提問。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved