森田賢二のleetCodeの使い方、解説、解答を毎日更新しているキャラクター

[leetcode]問題解答と解説。219. Contains Duplicate II [JavaScript]

[leetcode]問題解答と解説。219. Contains Duplicate II [JavaScript]

皆さんleetCode好きですよね。私も好きです。
なかなかやる機会がないのですよね。
leetCodeの使い方や解説ではなく実際に問題を解決するために何をしたか
をメモ書きして行きます

私はある決意をして今臨んでいます。
モチベーションを保つためだけにこれをやっています。

では今日のleetCode。
「219. Contains Duplicate II」の解決策と方法。自分がまず挑戦して
やったことをさらけ出します。

※下にある自分のコードは自分で設けた制限時間内に書けたところまです。

これは
「私は年末までこれを続けたらどんなleetCoderになるか」のシリーズ。
実験的ブログ更新です。

森田賢二のleetCode
森田賢二のleetCode

219. Contains Duplicate II ルール

ざっくり和訳

219. Contains Duplicate II 問題ページ

219. Contains Duplicate II

219. Contains Duplicate II

my code is time over.

function containsNearbyDuplicate(nums: number[], k: number): boolean {
    let obj = {}
    for (let index = 0; index < nums.length; index++) {
        if(!!obj[nums[index]] !== undefined){
            if(Math.abs(obj[nums[index]] - index) <= k){
              return true
            }
        }
        obj[nums[index]] = index
    }
    return false;
};

これは一発合格

219. Contains Duplicate II。discussの中の一つの解答例

数ある中からJavaScriptのもので、理解しやすい解説をピックアップしました。
discussから見ればさらにもっと違う方法で真似したくなるものがあるかもしれないですね

JavaScriptでfilterされている、discussはこちらから

個人的には、これが良かった

219. Contains Duplicate II

1

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {boolean}
 */
var containsNearbyDuplicate = function(nums, k) {
  const map = new Map();
  for (let i = 0; i < nums.length; i++) {
    if (i - map.get(nums[i]) <= k) {
      return true;
    }
    map.set(nums[i], i);
  }
  return false;
};

大きくは

  • objectではなくMapを使っているところ
  • Math.absを使わないところが違う

219. Contains Duplicate IIをやってみて感想

objectを使うと往々にして遅くなるようなのでMapを使って行きたい

カテゴリー leetCode