【描述】
给定一个未排序的整数数组,求序列中最长连续元素的长度。
例如,给定[100,4,200, 1, 3, 2],最长的连续元素序列是[1, 2, 3, 4].返回长度:4
算法应该在O(n)复杂度下运行;
【分析】
针对无序数组中查询最长连续元素的问题,一般情况下先对数组进行排序处理,然后进行最长连续元素查询,以上算法的时间复杂度可以控制在O(nlogn),此处要求时间复杂度为O(n),所以需要采用其他算法;
针对无序数组查询最长连续元素,不进行排序的情况下,可以采用查询的方法进行判断数组元素值是否存在连续数组元素值;以上算法时间复杂度为O(n)满足需求,具体代码实现如下:
【代码实现】
注意:需要测试用例,评论留言;
//demo.hpp
int longestConsecutive(const vector<int> &num);
//demo.cc
int longestConsecutive(const vector<int> &num)
{
unordered_map<int, bool> used;
int longest = 0;
for (auto ix : num) {
used[ix] = false;
}
for (auto ix : num) {
if (used[ix]) {
continue;
}
int length = 1;
used[i