簡體   English   中英

在每k個子數組中查找不同元素的數量

[英]Finding count of distinct elements in every k subarray

如何有效解決這個問題?

給定大小為n的數組和整數k,我們需要在大小為k的窗口中返回所有不同數字的計數總和。 窗口向前滑動。

例如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。
  2. 如果該頻率現在為1,則將其添加到當前總和中。
  3. 將舊數字的頻率減少1。
  4. 如果該頻率現在為0,則將其從當前總和中減去。

遍歷數組時,可以使用哈希表H跟蹤窗口。 您還為哈希表中的每個條目保留一個附加字段,用於跟蹤該元素在窗口中出現的次數。

首先將arr的前k元素添加到H 然后,您遍歷arr的其余部分,並減少剛離開窗口的元素的計數器字段,並增加進入窗口的元素的計數器字段。

在任何時候(包括初始插入到H ),如果counter字段變為1 ,則將增加窗口中具有的不同元素的數量。 當最后一次出現的元素離開窗口時或第一次出現進入窗口時,可能會發生這種情況。 如果計數器字段變為1任何其他值,則將減少窗口中具有的不同元素的數量。

這是arr中元素數量的線性解決方案。 散列整數可以做到像這樣 ,但是根據語言使用來實現您的解決方案你可能不真的需要他們的哈希自己。 如果arr元素所在的范圍足夠小,則可以使用一個簡單的數組代替哈希表,如其他貢獻者所建議的那樣。

實際上,我是問題的提問者,我沒有回答這個問題,但是我只是想對答案發表評論,但是由於我名聲很少,所以我不能。

我認為對於{1,2,1,3}和k = 4,給定的算法產生count = 3,但是根據問題,該計數應為2(因為重復了1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM