e给出一个未排序的整数数组,找出最长的连续元素序列的长度。
如:
给出[100, 4, 200, 1, 3, 2],
最长的连续元素序列是[1, 2, 3, 4]。返回它的长度:4。
你的算法必须有O(n)的时间复杂度 。
package com.algo.coding.puzzles;
import java.util.HashMap;
public class LongestConsecutive49 {
private HashMap hs = new HashMap();
public int longestConsecutive(int[] arr){
for(int i = 0; i < arr.length; i++){
hs.put(arr[i], i);
}
int[] length = new int[arr.length];
for(int i = 0; i< arr.length; i++){
length[i]=this.consecutiveLength(arr[i], length);
}
int maxLength = 0;
for(int i = 0; i< arr.length; i++){
if(length[i] > maxLength) maxLength = length[i];
}
System.out.println(maxLength);
return maxLength;
}
public int consecutiveLength(int num, int[] length){
// int length;
int len;
if(this.hs.get(num) == null){
len = 0;
return 0;
}
else{
int index = (int) hs.get(num);
if(length[index] > 0) return length[index];
else {
len= this.consecutiveLength(num-1, length) + 1;
length[index] = len;
}
}
return len;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {100,4,200,1,3,2};
LongestConsecutive49 l = new LongestConsecutive49();
l.longestConsecutive(arr);
}
}