题目描述

原题链接
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

    个人解法

Javascript

  1. /*
  2. * @lc app=leetcode.cn id=128 lang=javascript
  3. *
  4. * [128] 最长连续序列
  5. */
  6. // @lc code=start
  7. /**
  8. * @param {number[]} nums
  9. * @return {number}
  10. */
  11. var longestConsecutive = function (nums) {
  12. myNums = Array.from(new Set(nums.sort((a, b) => a - b)));
  13. if (!myNums.length) {
  14. return 0;
  15. }
  16. let max = 1;
  17. let res = 1;
  18. for (let i = 1; i < myNums.length; i++) {
  19. if (myNums[i] - myNums[i - 1] === 1 || myNums[i] - myNums[i-1] === 0) {
  20. res += 1;
  21. } else {
  22. res = 1;
  23. }
  24. max = Math.max(max, res);
  25. }
  26. return max;
  27. };
  28. // @lc code=end

Java

其他解法

Java

Javascript

  1. /*
  2. * @lc app=leetcode.cn id=128 lang=javascript
  3. *
  4. * [128] 最长连续序列
  5. */
  6. // @lc code=start
  7. /**
  8. * @param {number[]} nums
  9. * @return {number}
  10. */
  11. var longestConsecutive = function (nums) {
  12. let num_set = new Set();
  13. for (const num of nums) {
  14. num_set.add(num);
  15. }
  16. let longestStreak = 0;
  17. for (const num of num_set) {
  18. if (!num_set.has(num - 1)) {
  19. let currentNum = num;
  20. let currentStreak = 1;
  21. while (num_set.has(currentNum + 1)) {
  22. currentNum += 1;
  23. currentStreak += 1;
  24. }
  25. longestStreak = Math.max(longestStreak, currentStreak);
  26. }
  27. }
  28. return longestStreak;
  29. };
  30. // @lc code=end