数组中紧跟 key 之后出现最频繁的数字
难度:
标签:
题目描述
代码结果
运行时间: 24 ms, 内存: 16.3 MB
// Java Stream Solution
// 题目思路:
// 1. 使用Stream API统计key后一个元素的出现次数
// 2. 通过Collectors.groupingBy和Collectors.counting收集数据
// 3. 找到出现次数最多的元素并返回
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Solution {
public int mostFrequentTarget(int[] nums, int key) {
Map<Integer, Long> countMap = IntStream.range(0, nums.length - 1)
.filter(i -> nums[i] == key)
.mapToObj(i -> nums[i + 1])
.collect(Collectors.groupingBy(t -> t, Collectors.counting()));
return countMap.entrySet().stream()
.max(Map.Entry.comparingByValue())
.get()
.getKey();
}
}
解释
方法:
这个解法使用了一个字典来记录每个可能的target(即紧跟在key后面的数字)的出现次数。遍历数组时,每当发现一个元素等于key时,就查看它后面的元素(target),并在字典中更新该target的计数。同时,我们持续跟踪最大出现次数及对应的数字,如果当前target的计数超过了之前的最大计数,就更新最大计数和结果变量。这种方法确保了我们在一次遍历中即可找到答案。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
在解法中,如果数组的长度非常小,例如只包含一个`key`或者`key`后没有其他元素,这种情况下该如何处理?
▷🦆
为什么选择使用字典来记录target的出现次数而不是其他数据结构,例如数组或计数排序?
▷🦆
在遍历数组时,你是如何确保在更新字典时不会遇到数组越界的问题?
▷🦆
当`key`在数组中连续出现时,例如`[key, key, target]`,这种情况下的输出是否会受到影响?
▷