• 128. Longest Consecutive Sequence (HashTable)


    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)时间复杂度,所以不能排序。将数据放入哈希表,这样查找时间复杂度是O(1),遍历到某个数据,可以向前和向后找它的连续序列。再用一个哈希表存储已访问过的元素,这样保证每个元素至多被处理一次。

    哈希表在C++中用unordered_set实现。set的实现是红黑树,插入查找删除的时间复杂度是O(logn)不能使用。

    class Solution {
    public:
        int longestConsecutive(vector<int>& nums) {
            unordered_set<int> visited;
            unordered_set<int> exist;
            int ret = 0;
            int count;
            int target;
            
            for(int i = 0; i < nums.size(); i++){
                exist.insert(nums[i]);
            }
            
            for(int i = 0; i < nums.size(); i++){
                if(visited.find(nums[i])!=visited.end()) continue;
                
                visited.insert(nums[i]);
                count = 1;
                target = nums[i];
                while(exist.find(--target)!=visited.end()){
                    visited.insert(target);
                    count++;
                }
                target = nums[i];
                while(exist.find(++target)!=visited.end()){
                    visited.insert(target);
                    count++;
                }
                if(count > ret) ret = count;
            }
            return ret;
        }
    };
  • 相关阅读:
    Tomcat配置JNDI
    (转)通过反编译深入理解Java String及intern
    (转)Java8内存模型-永久代(PermGen)和元空间(Metaspace)
    排序算法
    并发编程
    MySQL
    Go语言
    Go语言
    Go语言
    Go语言
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4853053.html
Copyright © 2020-2023  润新知