128. Longest Consecutive Sequence
1. 問題描述:
輸入一個未排序的整型數組,找到最長的連續元素序列,並返回其長度。
2. 解決思路:
拿到這道題,首先想到是先排序,然後遍歷找到連續最長的元素。但是我們想通過更好的方式去解決這個問題。所以想到用HashMap存儲每個節點的值和這個節點所在序列的長度。當遍歷到每個元素時,找當前Map中是否有這個元素的左右連續元素存在,然後計算當前節點所在序列的長度,與最長長度比較替換。
3. java代碼:
public class Solution {
public int longestConsecutive(int[] nums) {
if(nums.length==0)
return 0;
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
int longestLength = 0;
for(int i=0;i<nums.length;i++) {
if(!map.containsKey(nums[i])) {
int leftLength = map.containsKey(nums[i]-1)? map.get(nums[i]-1) : 0;
int rightLength = map.containsKey(nums[i]+1)? map.get(nums[i]+1) : 0;
int curLength = leftLength + 1 + rightLength;
map.put(nums[i],curLength);
map.put(nums[i]-leftLength,curLength);
map.put(nums[i]+rightLength,curLength);
if(curLength>longestLength)
longestLength = curLength;
}
}
return longestLength;
}
}
4. 算法評估:
希望多多指正交流