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) の追加メモリ)もありますが、セットを使う方法が最も直感的で汎用的です。
-
Pythonでリスト内の最小値を見つける方法を解説
この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。
-
Pythonでリスト内の最大値を見つける方法|sort()とmax()の2つのアプローチ
この記事では、リストの中から最大の数値を見つけるための解決策とアプローチについて詳しく解説します。問題の概要数値のリストが与えられたとき、その中から最大の要素を見つけ出す必要があります。Pythonでは、主に以下の2つの方法でこれを実現できます。ソート(並べ替え)を利用する方法組み込み関数 max() を利用する方法アプローチ1:sort() 関数を使う方法リストを sort() メソッドで昇順に並べ替えると、リストの最後の要素(インデックス -1)が必ず最大値になります。サンプルコードlist1 = [18, 65, 78, 89, 90] list1.sort() # メイン処理 prin