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

Pythonで1回だけ出現する要素を見つける方法

問題概要

数値のリスト nums が与えられ、その中のすべての値はちょうど3回ずつ出現しますが、1つの値だけは1回しか出現しません。この「唯一の値」を見つけ出すのが課題です。

例えば、入力が nums = [3, 3, 3, 8, 4, 4, 4] の場合、8だけが1回しか出現していないため、出力は 8 になります。

解決のアプローチ

この問題を解くには、以下の手順に従います。

  • 各値とその出現回数(頻度)を対応付けたマップを作成する
  • 頻度が最小の値(=1回しか出現していない値)を返す

Pythonでは collections.Counter を使うことで、要素の出現回数を簡単に数えることができます。あとは min() 関数と key 引数を組み合わせれば、最も出現回数の少ない要素を効率よく取得できます。

実装例

from collections import Counter
class Solution:
    def solve(self, nums):
        nums = Counter(nums)
        return min(nums, key=nums.get)
ob = Solution()
nums = [3, 3, 3, 8, 4, 4, 4]
print(ob.solve(nums))

入力

[3, 3, 3, 8, 4, 4, 4]

出力

8

コードの解説

まず Counter(nums) によって、リスト内の各要素が出現した回数を辞書形式で取得します。上記の入力の場合、{3: 3, 8: 1, 4: 3} のようなカウント結果になります。

次に min(nums, key=nums.get) を実行すると、各キーの値(出現回数)を比較基準として最小のもの、つまり出現回数が最も少ないキー「8」が返されます。

この方法はシンプルで可読性が高く、リストの長さを n とすると O(n) の時間計算量で動作します。なお、厳密な定数空間での解法が必要な場合は、ビット演算を活用する手法も検討できますが、実用性と分かりやすさの観点から Counter を使った方法が広く利用されています。

  1. Pythonで配列内の最大の要素を見つける方法を解説

    この記事では、「配列の中から最大の要素を求める」という問題の解決方法について詳しく解説します。 問題の概要 問題文:与えられた配列に対して、その中で最も大きい要素を計算して求める必要があります。 ここではブルートフォース(総当たり)アプローチを使用します。これは、配列全体を先頭から順番に走査しながら各要素を比較し、その時点での最大値を更新していくというシンプルかつ確実な手法です。 実装例 以下に具体的なコードを示します。 # 最大値を求める関数 def largest(arr, n): # 最大要素の初期値として最初の要素を設定 max = arr[0] # 配列全体を

  2. Pythonで配列内の最大要素を見つける方法【初心者向け解説】

    本記事では、配列の中から最大の要素を見つけるための解法とアプローチについて詳しく解説します。 問題の概要 配列が入力として与えられたとき、その中から最も大きい要素を見つけ出すことが課題となります。 アプローチ この問題は「線形探索」と呼ばれるシンプルな手法で解決できます。手順は以下の通りです。 まず、変数 max を配列の最初の要素で初期化します。 次に、2番目の要素から配列の末尾まで順番に走査していきます。 走査中の各要素について、現在の max の値と比較します。 要素が max より大きければ、max の値をその要素で更新します。 そうでなければ、そのまま次の要素へ進みます。 この処