题目大意:
给出一个数组,求里面的数字能组成的最长连续序列的长度。
要求在 O (n) 时间内。
思路:
- 哈希表,遍历数组中的数字 num, 根据 num-1和 num+1的长度来更新。
- 枚举数组中的数字num, 当num-1不在数组中时,num是一个序列的起始,查找。
代码:
代码1:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int, int> mp;
int ans = 0;
for (auto num : nums) {
if (mp.count(num)) continue;
auto iterl = mp.find(num-1);
auto iterr = mp.find(num+1);
int l = iterl != mp.end() ? iterl->second : 0;
int r = iterr != mp.end() ? iterr->second : 0;
int t = l + r + 1;
mp[num] = mp[num-l] = mp[num+r] = t;
ans = max(ans, t);
}
return ans;
}
};
代码2:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<long long> st(nums.begin(), nums.end());
int ans = 0;
for (auto num : st) {
if (st.count(num-1)) continue;
int l = 0;
while(st.count(num++)) l++;
ans = max(ans, l);
}
return ans;
}
};
逻辑思维有待加强啊。