Pythonでリスト内のすべての値の出現回数が一意かどうかを確認する方法
正または負の整数を含むリスト nums が与えられたとき、配列内のすべての値の出現回数が一意(重複がない)であるかどうかを確認する必要があります。
例えば、入力が nums = [6, 4, 2, 9, 4, 2, 2, 9, 9, 9] の場合、出力は True になります。これは、6 が 1 回、4 が 2 回、2 が 3 回、9 が 4 回出現しており、すべての出現回数が互いに異なるためです。
この問題を解決するには、以下の手順に従います。
num_counts := 各値とその出現回数を格納する新しいマップ(辞書)を作成します
occurrences := num_counts のすべての値(出現回数)のリストを取得します
occurrences のサイズが、occurrences 内の一意な要素数と一致する場合は True を返し、そうでなければ False を返します
より理解を深めるために、以下の実装例を見てみましょう。
例
from collections import Counter class Solution: def solve(self, nums): num_counts = dict(Counter(nums)) occurrences = num_counts.values() return len(occurrences) == len(set(occurrences)) ob = Solution() nums = [6, 4, 2, 9, 4, 2, 2, 9, 9, 9] print(ob.solve(nums))
入力
[6, 4, 2, 9, 4, 2, 2, 9, 9, 9]
出力
True
解説
このコードでは、Python標準ライブラリの collections.Counter を活用しています。Counter はリストなどのイテラブルを受け取り、各要素の出現回数を自動的に集計してくれる便利なクラスです。
処理の流れは次のとおりです。
Counter(nums)で各値の出現回数を辞書形式で取得します.values()で出現回数だけを抽出しますset()を使って出現回数の重複を除去し、元の件数と比較することで、すべての出現回数が一意かどうかを判定します
時間計算量は O(n)、空間計算量も O(n) であり、非常に効率的な解法となっています。
-
Pythonで二分探索木(BST)に特定の値が存在するかどうかを判定する方法
問題の概要二分探索木(BST:Binary Search Tree)と、探索対象となる値 val が与えられたとき、その値が木の中に存在するかどうかを判定するプログラムを作成します。例えば、次のような二分探索木があったとします。このとき val = 7 とすると、7は木の中に存在するため、出力は True になります。アルゴリズムの手順BSTの性質を利用すると、効率的に値を探索できます。手順は以下の通りです。関数 solve() を定義します。引数として root(現在のノード)と val を受け取ります。root が null(None)の場合は False を返します。root のデータが
-
指定された文字列がキーワードであるかどうかを確認するPythonプログラム
この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ