天天看点

【Leetcode】128. Longest Consecutive Sequence题目地址:

题目地址:

https://leetcode.com/problems/longest-consecutive-sequence/

题目大意是给定一个数组,求其中的一个子集,这个子集的数可以组成一个尽量长的连续的序列,问这个序列最长的长度。这道题其实并不难,用HashSet可以得到一个时空复杂度都是 O ( n ) O(n) O(n)的算法:

import java.util.Set;
import java.util.HashSet;

class Solution {
     public int longestConsecutive(int[] nums) {
         if (nums == null || nums.length == 0) {
            return 0;
        }
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        int maxLen = 1;
        while (!set.isEmpty()) {
        	// 初始化一个长度,然后在集合里随便取个数
            int curLen = 1;
            int curNum = set.iterator().next();
            set.remove(curNum);
            // 算比它大的连续的数有几个
            for (int i = 1; set.remove(curNum + i); i++) {
                curLen++;
            }
            // 算比它小的连续的数有几个
            for (int i = 1; set.remove(curNum - i); i++) {
                curLen++;
            }
            if (curLen > maxLen) {
                maxLen = curLen;
            }
        }
        return maxLen;
    }
}