Python程式:查詢具有相同頻率的序列


假設我們有一個數字列表。我們需要找到最長數字序列的長度,使得當我們從序列中刪除一個數字時,每個數字出現的次數都相同。

因此,如果輸入類似於 numbers = [2, 4, 4, 7, 7, 6, 6],則輸出將為 7。

為了解決這個問題,我們將遵循以下步驟:

  • num_freq := 一個新的對映

  • freq_freq := 一個新的對映

  • diff_freq := 一個新的集合

  • result := 1

  • 對於每個索引 I 和 nums 中的值 num,執行以下操作:

    • cur_freq := num_freq[num]

    • num_freq[num] := num_freq[num] + 1

    • freq_freq[cur_freq] := freq_freq[cur_freq] − 1

    • freq_freq[cur_freq + 1] := freq_freq[cur_freq + 1] + 1

    • 將 cur_freq + 1 新增到 diff_freq 中

    • 如果 cur_freq 存在於 diff_freq 中,並且 freq_freq[cur_freq] 等於 0,則:

      • 從 diff_freq 中刪除 cur_freq

    • df_list := 透過獲取 diff_freqs 的元素建立的新列表

    • 如果 df_list 的大小為 1,則:

      • result := i + 1

    • 否則,當 df_list 的大小為 2 且(當 [|freq_freq[df_list[0]] - freq_freq[df_list[1]]|,freq_freq[df_list[0]],freq_freq[df_list[1]]] 中的任何一個為 1)並且(當 [|df_list[0] - df_list[1]|,df_list[0],df_list[1]] 中的任何一個為 1)時,則:

      • result := i + 1

  • 返回 result

讓我們看看下面的實現來更好地理解:

示例

 線上演示

from collections import defaultdict
class Solution:
   def solve(self, nums):
      num_freq = defaultdict(int)
      freq_freq = defaultdict(int)
      diff_freq = set()
      result = 1
      for i, num in enumerate(nums):
         cur_freq = num_freq[num]
         num_freq[num] += 1
         freq_freq[cur_freq] −= 1
         freq_freq[cur_freq + 1] += 1
         diff_freq.add(cur_freq + 1)
         if cur_freq in diff_freq and freq_freq[cur_freq] == 0:
            diff_freq.remove(cur_freq)
         df_list = list(diff_freq)
         if len(df_list) == 1:
            result = i + 1
         elif (
            len(df_list) == 2
            and any(
               x == 1
               for x in [
                  abs(freq_freq[df_list[0]] − freq_freq[df_list[1]]),
                  freq_freq[df_list[0]],
                  freq_freq[df_list[1]],
               ]
            )
            and any(x == 1 for x in [abs(df_list[0] − df_list[1]), df_list[0], df_list[1]])
            ):
            result = i + 1
      return result
ob = Solution()
print(ob.solve([2, 4, 4, 7, 7, 6, 6]))

輸入

numbers = [2, 4, 4, 7, 7, 6, 6]

輸出

7

更新於: 2020-12-26

126 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告