LeetCode 180. 连续出现的数字

题目描述

180. 连续出现的数字

思路分析

解法一:线性扫描(推荐)

核心思路

  • 按时间或 id 顺序遍历,统计当前数字连续出现次数。
  • 当某数字连续出现达到 3 次时加入结果集。
  • 使用集合去重。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示日志条目数量。
  • 空间复杂度:O(n),用于结果集合。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

class Solution {
    public List<Integer> consecutiveNumbers(int[] nums) {
        List<Integer> res = new ArrayList<>();
        Set<Integer> seen = new HashSet<>();
        int count = 1;

        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i - 1]) {
                count++;
            } else {
                count = 1;
            }

            if (count >= 3 && !seen.contains(nums[i])) {
                seen.add(nums[i]);
                res.add(nums[i]);
            }
        }

        return res;
    }
}
func consecutiveNumbers(nums []int) []int {
	res := make([]int, 0)
	seen := make(map[int]bool)
	count := 1

	for i := 1; i < len(nums); i++ {
		if nums[i] == nums[i-1] {
			count++
		} else {
			count = 1
		}

		if count >= 3 && !seen[nums[i]] {
			seen[nums[i]] = true
			res = append(res, nums[i])
		}
	}

	return res
}

相似题目

题目 难度 考察点
180. 连续出现的数字 中等 扫描
609. 在系统中查找重复文件 中等 哈希
524. 通过删除字母匹配到字典里最长单词 中等 扫描
229. 多数元素 II 中等 计数
128. 最长连续序列 中等 哈希
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/80559323
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!