集合で同じ値が 2 回出てくるかを確かめる

整数の​並びの​中に、​同じ​値が​ 2 回以上出てくるかを​判定します。​見た​値を​集合に​覚え、​出てきた​値が​もう​集合に​あるかを​一定の​手間で​調べる​練習です。

海外で定番の問題リスト 4 本のうち 3 本に入っています (Blind 75、NeetCode 150、Grind 75)

問題

整数の並び nums を受け取ります。nums の中に、同じ値が 2 回以上出てくるなら真、どの値も 1 回しか出てこないなら偽を返す関数を書いてください。

  • 位置が違っても値が同じなら、同じ値とみなします。5 と -5 は別の値です
  • nums の長さは 1 以上 100000 以下、値はどれも絶対値が 10 億以下です

入力と出力の例

例 1

入力

nums = [4, 9, 2, 9, 7]

出力

true

例 2

入力

nums = [15, -3, 8, 0]

出力

false

例 3

同じ値が離れた位置にあっても、見つけられる必要があります。

入力

nums = [-7, 7, 0, 3, -7]

出力

true

面接での聞かれ方

面接の最初の 1 問として、短く出されることが多い問題です。

  • 「整数の配列に重複があるかを返してください」
  • 書き終えたあとに「計算量は?」「メモリを使わずに解くとどうなりますか?」と、時間と記憶の取り引きを聞かれます
  • 「重複が見つかったら、すぐに止められますか?」と、早く打ち切れるかを聞かれることもあります

答えは真か偽だけなので、すぐに書けます。そのぶん、ほかの書き方と比べて計算量を言えるかが見られています。

アルゴリズムのチートシートの「ハッシュマップ」に、​この​型の​要点を​表と​コードで​まとめています。

main.py
def has_duplicate(nums):
    # ここに書きます
    pass


# 「実行」を押すと、この行の結果が出ます
print(has_duplicate([4, 9, 2, 9, 7]))

できているか「例で確かめる」を押すと、問題の例を全部この関数に渡して、通ったかをここに出します