最长连续序列

给定一个未排序的整数数组 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

func longestConsecutive(nums []int) int {
	// 做了一个set
	countSet := make(map[int]struct{})
	for i := range nums {
		// 将数据存入set
		countSet[nums[i]] = struct{}{}
	}
	maxCount := 0
	for i := range countSet {
		count := 1
		numberAddFlag, numberSubFlag := true, true
		// 删除对应的set
		delete(countSet, i)
		for number := 1; numberAddFlag || numberSubFlag; number++ {
			if numberAddFlag {
				if _, ok := countSet[i+number]; ok {
					// 能够查询到
					count++
					delete(countSet, i+number)
				} else {
					numberAddFlag = false
				}
			}
			if numberSubFlag {
				if _, ok := countSet[i-number]; ok {
					// 能够查询到
					count++
					delete(countSet, i-number)
				} else {
					numberSubFlag = false
				}
			}
		}
		if maxCount < count {
			maxCount = count
		}
	}
	return maxCount
}
func longestConsecutive(nums []int) int {
	// 做了一个set
	countSet := make(map[int]struct{})
	for i := range nums {
		// 将数据存入set
		countSet[nums[i]] = struct{}{}
	}
	maxCount := 0
	for i := range countSet {
		count := 1
		if _, ok := countSet[i-1]; ok {
			// 能够查询到, 不是第一个
			continue
		}
		// 这里是第一个
		for j := 1; true; j++ {
			if _, ok := countSet[i+j]; ok {
				// 能够查询到第二个, 增加累计数
				count++
			} else {
				break
			}
		}
		if maxCount < count {
			maxCount = count
		}
	}
	return maxCount
}
// 这个没通过测试 用的是bite数组吧相当于 这个速度应该很快 但是内存消耗绝对会很大
func longestConsecutive(nums []int) int {
	if len(nums) == 0 {
		return 0
	}
	minNum, maxNum := math.MaxInt32, math.MinInt32
	for i := range nums {
		if nums[i] < minNum {
			minNum = nums[i]
		}
		if nums[i] > maxNum {
			maxNum = nums[i]
		}
	}
	boolArray := make([]bool, maxNum-minNum+1)
	for i := range nums {
		boolArray[nums[i]-minNum] = true
	}

	var countMax int = 0
	var count int = 0
	for i := range boolArray {
		if boolArray[i] {
			count++
		} else {
			if countMax < count {
				countMax = count
			}
			count = 0
		}
	}
	if countMax < count {
		return count
	}
	return countMax
}
posted @ 2024-04-26 08:41  烟熏咸鱼干  阅读(2)  评论(0编辑  收藏  举报