LC128.最长连续序列

原题链接
image.png

思路

image.png

  • 例如[4, 2, 1, 3, 100, 101, 102]
  • 分成两步:

    1. 找个每个连续的部分(红圈圈起来的)具体做法:把整个数组倒进哈希表里面,如果num - 1不存在,那么num一定就是连续部分的开始。
    2. 判断每个连续部分的长度 具体做法:逐个往后读,直到哈希表中不存在该数 + 1为止

      代码

      1. class Solution {
      2. public:
      3. int longestConsecutive(vector<int>& nums) {
      4. unordered_set<int> rec;
      5. for (int num : nums) {
      6. rec.insert(num);
      7. }
      8. int max_len = 0;
      9. for (int num : nums) {
      10. int cur_len = 1;
      11. int cur_num = num;
      12. if (!rec.count(cur_num - 1)) {
      13. while (rec.count(cur_num + 1)) {
      14. cur_len += 1;
      15. cur_num += 1;
      16. }
      17. }
      18. max_len = max(max_len, cur_len);
      19. }
      20. return max_len;
      21. }
      22. };