美文网首页
005-在无序数组中查找最长的连续数字长度

005-在无序数组中查找最长的连续数字长度

作者: Woodlouse | 来源:发表于2020-05-10 20:48 被阅读0次

    描述

    现在有一个没有排序的数组,在这个数组中找到最长的连续数字。

    例如:数组[100, 4, 200, 1, 3, 2, 5],最长的连续元素是[1, 2, 3, 4, 5],长度为5。

    分析

    数组是无序的,在无序数组里查找最长元素,可以借助哈希表,用一个哈希表记录每个元素是否被使用,对于没一个元素,以此元素为起点,分别向左,向右判断是否有此数字,直到不存在未知,记录下最长的长度。

    int findTheLongestConsecutiveSequence(int A[], int n)
    {
        std::unordered_map<int, bool> used;
        
        int longestLen = 0;
        
        for (int i=0; i<n; ++i) {
            used[A[i]] = false;
        }
        
        for(int i=0; i<n; i++) {
            if (used[A[i]]) {
                continue;
            }
            
            int len = 1;
            used[A[i]] = true;
            
            // 向右寻找数字
            for (int j=A[i]+1; used.find(j)!=used.end(); j++) {
                used[j] = true;
                ++len;
            }
            
            //向左寻找数组
            for(int j=A[i]-1; used.find(j)!=used.end(); j--) {
                used[j] = true;
                ++len;
            }
            
            longestLen = std::max(longestLen, len);
        }
        
        return longestLen;
    }
    

    代码在这儿

    相关文章

      网友评论

          本文标题:005-在无序数组中查找最长的连续数字长度

          本文链接:https://www.haomeiwen.com/subject/ztesnhtx.html