Python
 Computer >> コンピューター >  >> プログラミング >> Python

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]がmxと同じ場合、dの各kのkのリスト
  • mn:=L
  • vsのvごとに、実行
    • mn:=mnの最小値および((L-(rnumsのvのインデックス)-(numsのvのインデックス))
  • 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

  1. Pythonでターゲットを保持している最短のサイクル長を見つけるプログラム

    有向グラフの隣接リストがあるとします。ここで、インデックスiの各リストは、ノードiからの接続されたノードで表されます。目標値もあります。ターゲットを含む最短サイクルの長さを見つける必要があります。解決策がない場合は-1を返します。 したがって、入力が次のような場合 0があることに注意してください。ただし、これは最短ではありません。 これを解決するには、次の手順に従います- 訪問:=新しいセット l:=要素ターゲットのリスト。 長さ:=0 lが空ではない場合は、 長さ:=長さ+ 1 nl:=新しいリスト lの各uについて、 グラフ[u]の各vについて、 vがターゲット

  2. Pythonでの頻度と同じ値を持つリスト内の要素を検索するプログラム

    numsという数値のリストがあるとすると、リスト内の頻度がその値と同じである要素があるかどうかを確認する必要があります。 したがって、入力が[2、4、8、10、4、4、4]の場合、出力はTrueになります これを解決するには、次の手順に従います- res:=値ごとの頻度を保存するための新しいマップ resのキーと値のペア(k、v)ごとに、を実行します。 kがvと同じ場合、 Trueを返す Falseを返す 理解を深めるために、次の実装を見てみましょう- 例 class Solution:    def solve(self, nums):