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

Pythonで同等の頻度のシーケンスを見つけるプログラム


番号のリストがあるとします。シーケンスから番号を削除したときに、各番号が同じ回数発生するように、番号の最長シーケンスの長さを見つける必要があります。

したがって、入力が数値=[2、4、4、7、7、6、6]のような場合、出力は7になります。

これを解決するには、次の手順に従います-

  • num_freq:=新しいマップ

  • freq_freq:=新しいマップ

  • diff_freq:=新しいセット

  • 結果:=1

  • インデックスIと値num(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と同じ場合、

      • 結果:=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)の場合、

      • 結果:=i + 1

  • 結果を返す

理解を深めるために、次の実装を見てみましょう-

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

  1. グラフがPythonのすべての人によってトラバース可能かどうかを確認するプログラム

    0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。グラフには3種類の重みを設定でき、各重みは特定のタスクを示します。グラフをトラバースできるのは、ジャックとケーシーの2人です。エッジの重みが1の場合、ジャックはグラフをトラバースできます。重みが2の場合、ケーシーはグラフをトラバースできます。エッジの重みが3の場合、両方がグラフをトラバースできます。グラフを両方でトラバース可能にするために必要なエッジをすべて削除する必要があります。ジャックとケーシー。グラフをトラバース可能にするために削除するエッジの数を返します。トラバ

  2. Pythonを使用して2つの式ツリーが同等であるかどうかを確認するプログラム

    2つの式ツリーが提供されているとします。 2つの式ツリーをチェックし、式ツリーが同様の値を生成するかどうかを判断するプログラムを作成する必要があります。 2つの式ツリーは順番に提供され、一致する場合はTrue値を返し、一致しない場合はFalse値を返します。 したがって、入力が次のような場合 その場合、出力はTrueになります。 2つの式ツリーは同じ値に評価されます。 これを解決するには、次の手順に従います。 関数dfs()を定義します。これはノード、dicを取ります ノードが空の場合、 戻る ノードの左側とノードの右側が空でない場合、 dic