给定未排序的整数数组,找到最长连续元素序列的长度
例如,
给定[100, 4, 2, 1, 3, 2]
最长的连续元素序列是[1, 2, 3, 4]
返回长度:4
您的算法应该以 O(n)复杂度运行
解题思路:
- 明确题目的要求,要求以 O(n) 的算法复杂度,所以可以是 2 * n, 3 * n 等
- 找到相关的数据结构,HashSet 来存储数组中的元素
- 遍历 Hashset 中的元素,如果存在的话,那么就将当前的元素移出集合中
- 用 pre, next 分别表示该数的小一位和大一位的数
- 重复 3 ,并将结果保存下来
代码如下:
public int longestConsecutive(int[] num) {
if(num == null || num.length == 0 ) return 0;
Set<Integer> set = new HashSet<>();
for(int item : num) set.add(item);
int res = 0;
for(int item : num){
set.remove(item);
int pre = item - 1;
int next = item + 1;
while(set.remove(pre)) pre--;
while(set.remove(next)) next++;
res = Math.max(res,next - pre - 1);
}
return res;
}
总结:
学会充分利用数据结构,好的数据结构来表示数据,绝对能有事半功倍的效果