128. Longest Consecutive Sequence 寻找最长连续子数组

在一个乱序数组中寻找最长的连续子数组。

注意:有重复元素时,只计数一次。

例子1:

Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

例子2:

Input: [0, 1, 1, 2]
Output: 3

思路: 先对原有数组进行排序, 再寻找最长连续子数组。

方法:

class Solution {
public:
    // [0,1,1,2] -> 3
    int longestConsecutive(vector& nums) {
        if (nums.empty()) { return 0; }
    
        sort(nums.begin(), nums.end());
	int max_len = 1;
	int cur_len = 1;
	for (int i = 1; i < nums.size(); ++i) {
            // 这里主要重复元素不计数
	    if (nums[i] != nums[i - 1]) {
                if (nums[i] == nums[i - 1] + 1) {
                    ++cur_len;
                } else {
                    max_len = max(cur_len, max_len);
                    cur_len = 1;
                }
            }
	}
	return max(cur_len, max_len);
    }
};

 

你可能感兴趣的:(leetcode)