Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 查找每个k子数组中不同元素的计数_Arrays_Algorithm_Integer_Distinct Values - Fatal编程技术网

Arrays 查找每个k子数组中不同元素的计数

Arrays 查找每个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

如何有效地解决这个问题

给定一个大小为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 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

你应该保持联系

  • 计算窗口中元素频率的贴图
  • 活期存款
如果可能的元素来自有限的集合,则具有频率的映射也可以是数组

然后当你的窗户向右滑动时

  • 将新数字的频率增加1
  • 如果该频率现在为1,则将其添加到当前总和
  • 将旧数字的频率减少1
  • 如果该频率现在为0,则从当前总和中减去该频率

  • 可以使用哈希表
    H
    在迭代数组时跟踪窗口。您还为哈希表中的每个条目保留一个附加字段,用于跟踪该元素在窗口中出现的次数

    首先将
    arr
    的第一个
    k
    元素添加到
    H
    。然后,遍历
    arr
    的其余部分,减少刚离开窗口的元素的计数器字段,增加进入窗口的元素的计数器字段

    在任何时候(包括初始插入到
    H
    ),如果计数器字段变为
    1
    ,则会增加窗口中不同元素的数量。这可能发生在元素的最后一个引用离开窗口或第一个引用进入窗口时。如果计数器字段变为除
    1
    以外的任何其他值,则会减少窗口中不同元素的数量


    这是
    arr
    中元素数量的线性解决方案。散列整数可以像这样完成,但是根据实现解决方案所使用的语言,您可能不需要自己对它们进行散列。如果
    arr
    元素所在的范围足够小,您可以使用一个简单的数组,而不是像其他贡献者建议的那样使用哈希表。

    事实上,我是问题的提问者,我不是在回答问题,但我只是想对答案进行评论,但我不能,因为我的名声很差


    我认为对于{1,2,1,3}和k=4,给定的算法产生count=3,但根据问题,count应该是2(因为1是重复的)

    元素的期望值范围是多少?如果范围适中,可以使用数组注册给定值的存在。确定。我同意。我最初的解决方案是解决一个稍微不同的问题。检查我的更新。