LeetCode 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. 最长连续序列 | 中等 | 哈希 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!