Ну сортировкой то сделали?
class Solution {
private:
template <class I>
int check(unordered_set<long long> s, I begin, I end) {
int result = 0;
unordered_set<long long> visited;
for (auto it = begin; it != end; ++it) {
int n = *it;
if (visited.find(n) == visited.end()) {
long long k = 1LL * n + 1;
int curr = 1;
while (visited.find(k) == visited.end() && s.find(k) != s.end()) {
visited.insert(k);
curr++;
k++;
}
result = max(result, curr);
}
}
return result;
}
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<long long> s(nums.begin(), nums.end());
return max(max(
check(s, nums.begin(), min_element(nums.begin(), nums.end())),
check(s, min_element(nums.begin(), nums.end()), nums.end())
),max(
check(s, nums.rbegin(), min_element(nums.rbegin(), nums.rend())),
check(s, min_element(nums.rbegin(), nums.rend()), nums.rend())
));
}
};
Не, я хотел так -> бегать по цепочкам последовательных элементов, попутно помечая их как посещенные. И делать это несколько раз, до первого минимального элемента слева и справа, потом до последнего минимального элемента аналогично.
Но есть хитрые тесты, которые всё ломают.