LeetCode 128 最长连续序列

给定一个未排序的整数数组 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 <= 10^5
  • -10^9 <= nums[i] <= 10^9

解题:

func longestConsecutive(nums []int) int {
	sort.Ints(nums)
	r, l, maxLen := 0, len(nums), 0
	if l <= 1 {
		return l
	}
	for i := 1; i < l; i++ {
		if nums[i]-nums[i-1] > 1 {
			maxLen = max(maxLen, r)
			r = 0
			continue
		}
		if nums[i]-nums[i-1] == 1 {
			r++
		}
	}
	return max(maxLen, r) + 1
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

官方解答:

1.哈希表

func longestConsecutive(nums []int) int {
	numSet := map[int]bool{}
	for _, num := range nums {
		numSet[num] = true
	}
	longestStreak := 0
	for num := range numSet {
		if !numSet[num-1] {
			currentNum := num
			currentStreak := 1
			for numSet[currentNum+1] {
				currentNum++
				currentStreak++
			}
			if longestStreak < currentStreak {
				longestStreak = currentStreak
			}
		}
	}
	return longestStreak
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注