Codingsignalの最初の重複問題の解決

987 ワード

ここで質問のプロンプトがあります.

Given an array a that contains only numbers in the range from 1 to a.length, find the first duplicate number for which the second occurrence has the minimal index. If there are no such elements, return -1.


この問題を解決するためにオブジェクトデータ構造を利用します.便利になるオブジェクトのプロパティは、オブジェクトの唯一のユニークなキーを格納することができます.これにより、配列を通過するだけで、既に見たことを追跡できます.
const a = [2, 1, 3, 5, 3, 2]

function firstDuplicate(a) {
  let obj = {}
  for (let i = 0; i < a.length; i++) {
      if (obj[a[i]]){
          return a[i]
      } else {
          obj[a[i]] = 1;
      }
  }
  return -1
}

firstDuplicate(a) // 3
そこで、ここで我々のコードを見て、我々はすぐに我々が我々のキーを保存するオブジェクトをつくります.
配列を反復処理するには、forループを使用します.配列の各項目について、値が既にオブジェクトのキーであるかどうかをチェックします.それが我々のオブジェクトでないならば、我々はそのキーをつくります.それが我々のオブジェクトにすでにあるならば、我々は我々がすでに我々の配列の前にその数を見たということを知っています.その時点で、我々がしなければならないすべては、その数を返すことです!
それは本当にこの問題を解決するために簡単です.そして、我々は線形、O(N)、解決を得るためにオブジェクトを利用しました.