[数组与排序]最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
代码
class Solution {
public int longestConsecutive(int[] nums) {
if(nums==null||nums.length==0) { //判断边界条件
return 0;
}
//key是nums数组的值,value对应的是每一个nums[i]处连续的序列的个数
Map<Integer,Integer> param=new HashMap<>();
for(int i=0;i<nums.length;i++) {
if(!param.containsKey(nums[i])) { //hashMap中没有该元素的时候。
param.put(nums[i], 1); //初始化认为与该元素相邻的只有一个。
int temp=nums[i]; //temp用来保存比该元素大的且连续的最大的那个元素
boolean flag=false; //用来判断是否有既有与该元素大的相邻元素,又有比该元素小的相邻元素。
if(param.containsKey(temp+1)) {
while(param.containsKey(temp+1)) {
temp++;
}
param.put(temp, param.get(temp)+1); //更新最大的那个元素的value,即连续序列的个数