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

Pythonでリスト内の最大の一意の数を求める方法

数値のリストが与えられたとき、その中で一度だけ出現する要素のうち最大のものを返す問題を考えてみましょう。該当する要素が存在しない場合は -1 を返します。例えば、リストが [5,2,3,6,5,2,9,6,3] の場合、9 は一度しか現れないため、出力は 9 となります。

解決のアプローチ

この問題は、辞書(ハッシュマップ)を使うことで効率的に解くことができます。手順は以下の通りです。

  • 各要素を順番に確認し、辞書に格納します。要素がまだ辞書に存在しない場合は新しいエントリを作成し、すでに存在する場合はカウント値を1つ増やします。
  • 次に辞書全体を走査し、カウントが 1 になっているキー(= 一度だけ出現した要素)の中から最大のものを返します。

Pythonでの実装例

以下のコードを見て、具体的な動作を理解しましょう。

class Solution(object):
    def largestUniqueNumber(self, A):
        d = {}
        ans = -1
        for i in A:
            if i not in d:
                d[i] = 1
            else:
                d[i] += 1
        for a, b in d.items():
            if b == 1:
                ans = max(a, ans)
        return ans

ob1 = Solution()
print(ob1.largestUniqueNumber([5,2,3,6,5,2,9,6,3]))

入力

[5,2,3,6,5,2,9,6,3]

出力

9

計算量について

このアルゴリズムの時間計算量は O(n) です(n はリストの長さ)。各要素を一度ずつ走査してカウントし、その後辞書のエントリを確認するだけで済むためです。空間計算量も O(n) となり、要素の出現回数を記録するための辞書が必要になります。

なお、Pythonでは collections.Counter を使えば、カウント処理をさらに簡潔に書くことも可能です。

  1. Pythonで点のリストから作れる最大の三角形の面積を求める方法

    平面上に与えられた点のリストの中から、任意の3点を選んで作ることができる三角形のうち、最も大きな面積を持つものを求める問題です。例えば、入力が [[0,0],[0,1],[1,0],[0,2],[2,0]] の場合、出力は 2 となります。解法のアプローチこの問題は、すべての3点の組み合わせについて三角形の面積を計算し、その最大値を求めることで解けます。手順は以下の通りです。結果を格納する変数 res を 0 で初期化する点のリストのサイズを N とする三重ループで、i、j、k の3つのインデックスの組み合わせをすべて列挙する(i < j < k)各組み合わせに対して、3点の座標

  2. Pythonで数値の一意な素因数の積を求める方法

    この記事では、以下の問題文に対する解決策について学びます。問題文数値 n が与えられたとき、その数値が持つすべての一意な素因数の積を求めて返します。例入力: num = 11 出力: 積は 11説明ここでは、入力された数値は 11 であり、素因数は 11 のみです。したがって、その積は 11 となります。アプローチ1:総当たり法i = 2 から n+1 までの for ループを使用し、i が n の因数であるかどうかを確認します。因数であれば、さらに i 自体が素数かどうかを判定し、素数であれば product 変数に積を格納します。この処理を i が n になるまで繰り返します。コード例de