【发布时间】:2021-12-09 11:44:18
【问题描述】:
给定一个整数数组arr和一个正整数m,你的任务是找出每个长度为的连续子数组中最常见元素的频率m 在 arr.
返回子数组元素中这些最高频率的数组,按相应子数组的起始索引排序。您可以查看示例部分以获得更好的理解。
例子
对于 arr = [1, 2] 和 m = 2,输出应该是
子数组发生次数(arr, m) = [1].
示例 1
arr 只包含一个长度为 m = 2 - arr[0..1] = [1, 2] 的连续子数组。此子数组包含 2 个最频繁的元素 - 1 和 2,它们的频率均为 1。
所以,答案是 [1]。对于 arr = [1, 3, 2, 2, 3] 和 m = 4,输出应该是
occurrencesInSubarrays(arr, m) = [2, 2].示例 2
arr 包含两个长度为 m = 4 的连续子数组:
arr[0..3] = [1, 3, 2, 2] 只包含一个最频繁的元素 - 2,其频率为 2。
arr[1..4] = [3, 2, 2, 3] 包含两个最频繁的元素 - 2 和 3,它们的频率都是 2。
将两个子数组的答案放在一起,我们得到数组 [2, 2]对于 arr = [2, 1, 2, 3, 3, 2, 2, 2, 2, 1] 和 m = 3,输出应该是
occurrencesInSubarrays(arr, m) = [2, 1, 2, 2, 2, 3, 3, 2]。示例 3
arr 包含 8 个长度为 m = 3 的连续子数组:
arr[0..2] = [2, 1, 2] 只包含一个最频繁的元素 - 2,其频率为 2。
arr[1..3] = [1, 2, 3] 包含三个最常见的元素 - 1、2 和 3。
它们的频率都是 1。
arr[2..4] = [2, 3, 3] 只包含一个最频繁的元素 - 3,它的频率是 2。
arr[3..5] = [3, 3, 2] 只包含一个最频繁的元素 - 3,它的频率是 2。
arr[4 ..6] = [3, 2, 2] 只包含一个最频繁的元素 - 2,其频率为 2。
arr[5..7] = [2, 2, 2] 只包含一个最频繁的元素 - 2,它的频率是 3。
arr[6..8] = [2, 2, 2] 只包含一个最频繁的元素 - 2 ,其频率为 3。
arr[7..9] = [2, 2, 1] 仅包含一个最频繁的元素 - 1,其频率为 2。将两个子数组的答案放在一起,我们得到数组 [2, 1, 2, 2, 2, 3, 3, 2]。
我的方法是使用两个哈希图。一个作为每一行的队列,一个保存每一行的总和。但它仍然是错误的。任何人都可以解决这个问题吗?
【问题讨论】:
-
请格式化您的帖子以提高可读性,并分享您认为自己解决问题的最佳尝试,并描述出了什么问题或让您感到惊讶的地方。 stackoverflow.com/help/how-to-ask
-
考虑一下这个问题,看来它可以在一行短的 Python 代码中解决。
-
标题和最后一句似乎描述了与帖子其余部分不同的问题。帖子中描述的问题没有提到最小化或求和,只是计算滑动窗口上的频率。这个问题是测试你是否可以实现一个频率计数器;相关数据结构见the collections library。
-
您的标题与您的实际问题不符。此外,对于
arr[7..9] = [2, 2, 1],最常见的元素是 2,而不是 1。
标签: python arrays algorithm dynamic-programming