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

描述

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

例如:数组[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;
}

代码在这儿

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。