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

Pythonでソート済みリストから一意な整数の個数を求める方法

ソートされた数値リスト nums が与えられたとき、そのリストに含まれる一意な要素(重複を除いた値)の個数を求める問題について解説します。

例えば、入力が nums = [3, 3, 3, 4, 5, 7, 7] の場合、一意な数値は [3, 4, 5, 7] となるため、出力は 4 になります。

解決のアプローチ

この問題は、セット(集合)を使うことでシンプルに解決できます。手順は以下の通りです。

  • 空のセット s とカウンター cnt = 0 を用意する
  • nums の各要素 i について以下を繰り返す
    • i がまだセット s に存在しない場合、i をセットに追加し、cnt を1増やす
  • 最後に cnt を返す

実装例

それでは、実際のコードを見てみましょう。

class Solution:
    def solve(self, nums):
        s = set()
        cnt = 0
        for i in nums:
            if i not in s:
                s.add(i)
                cnt += 1
        return cnt

ob = Solution()
print(ob.solve([3, 3, 3, 4, 5, 7, 7]))

入力

[3, 3, 3, 4, 5, 7, 7]

出力

4

より簡潔な書き方

Pythonでは、セットの特性を活かせば、この処理を1行で表現することもできます。

def solve(nums):
    return len(set(nums))

print(solve([3, 3, 3, 4, 5, 7, 7]))  # 出力: 4

set(nums) でリストから重複が自動的に除去され、len() でその要素数を取得できます。コードも読みやすく、実務でも推奨される書き方です。

計算量について

どちらの方法でも、各要素に対してセットへの挿入・検索を行うため、時間計算量は O(n)、空間計算量もセットに最大 n 個の要素を格納するため O(n) となります。リストがソート済みであることを利用すれば、隣接する要素同士を比較する方法(O(1) の追加メモリ)もありますが、セットを使う方法が最も直感的で汎用的です。

  1. Pythonでリスト内の最小値を見つける方法を解説

    この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。

  2. Pythonでリスト内の最大値を見つける方法|sort()とmax()の2つのアプローチ

    この記事では、リストの中から最大の数値を見つけるための解決策とアプローチについて詳しく解説します。問題の概要数値のリストが与えられたとき、その中から最大の要素を見つけ出す必要があります。Pythonでは、主に以下の2つの方法でこれを実現できます。ソート(並べ替え)を利用する方法組み込み関数 max() を利用する方法アプローチ1:sort() 関数を使う方法リストを sort() メソッドで昇順に並べ替えると、リストの最後の要素(インデックス -1)が必ず最大値になります。サンプルコードlist1 = [18, 65, 78, 89, 90] list1.sort() # メイン処理 prin