Competitive Programming Academy · レッスン

所属判定と重複排除のための集合

定数時間で存在を判定します

レッスン 1/413 ステップ

「所属判定と重複排除のための集合」はCoddyKit上の無料Competitive Programming Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCompetitive Programming Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Competitive Programming Academyコースには全4レッスンが含まれています。

set の利点

set は順序を持たない一意な要素を保存します。本当の力は、「これが存在するか」をほぼ定数時間で答えられることです。⚡

list ではいけない理由

list でメンバーシップを確認すると、すべての要素を調べるため O(n) かかります。一方、set は値をハッシュ化し、対応するバケットへ直接移動します。

set を作る

波括弧または set() の呼び出しで作成できます。空の set には set() を使う必要があります。空の波括弧は辞書になるためです。

seen = set()
vowels = {'a', 'e', 'i', 'o', 'u'}

メンバーシップテスト

in キーワードを使って、値が存在するか確認します。set ではこれが高速な検索になるため、このデータ構造を使う価値があります。

if x in seen:
    print('already saw it')

要素を追加する

add を使って値を追加します。同じ値を繰り返し追加しても何も変わらないため、set がすべての要素を自動的に一意に保ってくれます。

seen.add(x)

即座に重複を除去する

任意のイテラブルを set() に渡せば、一回の走査で重複がなくなります。競技プログラミングの入力から重複を除去する最短の方法です。

unique = set(nums)

異なる値を高速に数える

よくある課題に「異なる値はいくつあるか」があります。データを set に変換し、その長さを一行で取得してください。

distinct_count = len(set(nums))

見た値を記録する

ループ中に set を構築して、最初の重複を見つけます。ある値がすでに set に入っていれば、その場で重複が見つかったことになります。

for v in nums:
    if v in seen:
        return True
    seen.add(v)

集合演算をそのまま使う

set は、共通部分、和集合、差集合を直接扱えます。二つのグループの比較を、入れ子のループではなく一つの演算子で実行できます。

common = a & b
only_a = a - b

削除と破棄

値が存在しない場合でも安全に削除するには discard を使います。一方、存在しないキーに対して remove を使うとエラーになります。意図に合う方を選んでください。

seen.discard(x)

ハッシュ可能な要素のみ

set には ハッシュ可能 な要素が必要なため、リストは入れられませんが、タプルは入れられます。保存する必要がある場合は、まずリストをタプルに変換してください。

grid_seen = set()
grid_seen.add((row, col))

クイックチェック

リストに異なる数値がいくつ含まれているかを知りたいとします。

まとめ

set を使うと、要素の存在確認を O(1) で行え、重複除去や共通部分・差分の取得も簡単です。「これを見たことがあるか」と考えたら、set を使ってください。🚀

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「所属判定と重複排除のための集合」レッスンは無料ですか?

はい。「所属判定と重複排除のための集合」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Competitive Programming Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Competitive Programming Academyコースには全4レッスンが含まれています。

「所属判定と重複排除のための集合」で何を学びますか?

定数時間で存在を判定します ブラウザで直接実行するハンズオンコードでCompetitive Programming Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Competitive Programming Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCompetitive Programming Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「所属判定と重複排除のための集合」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCompetitive Programming Academyレッスンでコードを書いて実行できますか?

はい。すべてのCompetitive Programming Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 所属判定と重複排除のための集合
  2. ルックアップテーブルとしての辞書
  3. Counter と defaultdict の実践
  4. Map でグループ化とバケット分け
← Competitive Programming Academyに戻る