LeetCode_Disjoint-Set_Longest Consecutive Sequence

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. 算法評估:

這裏寫圖片描述


希望多多指正交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章