在一个乱序数组中寻找最长的连续子数组。
注意:有重复元素时,只计数一次。
例子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<int>& 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);
}
};