Python程式:查詢具有相同最大頻數的最短子列表長度
假設我們有一個名為nums的數字列表。如果nums中出現頻率最高的數字的頻率為k,我們需要找到一個最短子列表的長度,使得其出現頻率最高的元素的頻率也為k。
因此,如果輸入類似於nums = [10, 20, 30, 40, 30, 10],則輸出將為3,因為這裡出現頻率最高的數字是10和30,k=2。如果我們選擇子列表[30, 40, 30],這是其中30出現且其頻率也為2的最短子列表。
為了解決這個問題,我們將遵循以下步驟:
- L := nums的長度
- rnums := nums的反轉
- d := 一個對映,包含nums中每個元素的頻率
- mx := d所有值的列表中的最大值
- vs := 對於d中的每個k,如果d[k]與mx相同,則建立一個k的列表
- mn := L
- 對於vs中的每個v,執行:
- mn := mn 和 (L - (v在rnums中的索引) - (v在nums中的索引)) 的最小值
- 返回mn
示例
讓我們看看下面的實現,以便更好地理解:
from collections import Counter def solve(nums): L = len(nums) rnums = nums[::-1] d = Counter(nums) mx = max(d.values()) vs = [k for k in d if d[k] == mx] mn = L for v in vs: mn = min(mn, (L - rnums.index(v)) - nums.index(v)) return mn nums = [10, 20, 30, 40, 30, 10] print(solve(nums))
輸入
[10, 20, 30, 40, 30, 10]
輸出
3
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP