Arrays 查找每个k子数组中不同元素的计数
如何有效地解决这个问题 给定一个大小为n的数组和一个整数k,我们需要返回大小为k的窗口中所有不同数字的计数之和。窗户向前滑动 e、 g.arr[]={1,2,1,3,4,2,3} 设k=4Arrays 查找每个k子数组中不同元素的计数,arrays,algorithm,integer,distinct-values,Arrays,Algorithm,Integer,Distinct Values,如何有效地解决这个问题 给定一个大小为n的数组和一个整数k,我们需要返回大小为k的窗口中所有不同数字的计数之和。窗户向前滑动 e、 g.arr[]={1,2,1,3,4,2,3} 设k=4 The first window is {1,2,1,3}, count of distinct numbers is 2….(1 is repeated) The second window is {2,1,3,4} count of distinct numbers is 4 The third wind
The first window is {1,2,1,3}, count of distinct numbers is 2….(1 is repeated)
The second window is {2,1,3,4} count of distinct numbers is 4
The third window is {1,3,4,2} count of distinct numbers is 4
The fourth window is {3,4,2,3} count of distinct numbers is 2
你应该保持联系
- 计算窗口中元素频率的贴图
- 活期存款
可以使用哈希表
H
在迭代数组时跟踪窗口。您还为哈希表中的每个条目保留一个附加字段,用于跟踪该元素在窗口中出现的次数
首先将arr
的第一个k
元素添加到H
。然后,遍历arr
的其余部分,减少刚离开窗口的元素的计数器字段,增加进入窗口的元素的计数器字段
在任何时候(包括初始插入到H
),如果计数器字段变为1
,则会增加窗口中不同元素的数量。这可能发生在元素的最后一个引用离开窗口或第一个引用进入窗口时。如果计数器字段变为除1
以外的任何其他值,则会减少窗口中不同元素的数量
这是
arr
中元素数量的线性解决方案。散列整数可以像这样完成,但是根据实现解决方案所使用的语言,您可能不需要自己对它们进行散列。如果arr
元素所在的范围足够小,您可以使用一个简单的数组,而不是像其他贡献者建议的那样使用哈希表。事实上,我是问题的提问者,我不是在回答问题,但我只是想对答案进行评论,但我不能,因为我的名声很差
我认为对于{1,2,1,3}和k=4,给定的算法产生count=3,但根据问题,count应该是2(因为1是重复的)元素的期望值范围是多少?如果范围适中,可以使用数组注册给定值的存在。确定。我同意。我最初的解决方案是解决一个稍微不同的问题。检查我的更新。