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

[LeetCode從零單刷]Longest Consecutive Sequence

編輯:關於C++

題目:

 

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(n) 的時間復雜度看到,就猜到是不是用動態規劃。然後想了很長時間找不到狀態轉移方程……

結果 Discuss 裡面都是用容器來計算(O(n) 不一定是DP,也可以考慮容器)。因為這段序列可能是有重復元素的,所以使用 set 相關的容器可以避免容器中包含重復元素。

但是,set / map 是基於紅黑樹實現的,因此查找效率是 O(log n) 級別的;因此,可以使用基於 hashmap 的 unordered_set 容器,查找效率是常數級別

設定一個容器,保存已經訪問過的元素。每個元素遍歷它 ++ 以及 -- 部分。

 

class Solution {
public:
    int longestConsecutive(vector& nums) {
        unordered_set visited;
        unordered_set all(nums.begin(), nums.end());
        
        int max = 0;
        int count, tmp;
        int size = nums.size();
        for(int i=0; i max) max = count;
        }
        return max;
    }
};

 

 

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