217. Contains Duplicate

Leetcode 問題: 217. Contains Duplicate

題目

Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.

給予一個整數陣列 nums,如果陣列中有任何整數重複出現 2 次以上,則回傳 true,如果都是唯一值,則回傳 false

Example

Input: nums = [1,2,3,1]
Output: true
Input: nums = [1,2,3,4]
Output: false
Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true

演算法

1. 建立儲存唯一值的 Set

將沒有出現過的資料都儲存在這個 Set

2. 判斷資料在 Set 有沒有出現過

若資料在 Set 有出現過,則表示這個數字陣列 nums有重複的整數,不需要再檢查,直接回傳 true

如果都沒有找到重複的資料,再回傳 false

答案

JavaScript

function containsDuplicate(numsList) {
    // 建立儲存唯一值的 Set
    var numsSets = new Set();
    // 預設沒有包含重複的數字
    var isContainDuplicateNumber = false;
    for (var i = 0; i < numsList.length; i++) {
        // 目前的數字
        var currentNumber = numsList[i];
        if (numsSets.has(currentNumber)) {
            // 如果目前的數字已經出現過,表示包含重複的數字,跳開不用再檢查了
            isContainDuplicateNumber = true;
            break;
        }
        // 將不重複的數字加入 Set
        numsSets.add(currentNumber);
    }
    return isContainDuplicateNumber;
}

TypeScript

function containsDuplicate(numsList: number[]): boolean {
    // 建立儲存唯一值的 Set
    const numsSets = new Set();
    // 預設沒有包含重複的數字
    let isContainDuplicateNumber = false;

    for (let i = 0; i < numsList.length; i++) {
        // 目前的數字
        let currentNumber = numsList[i];

        if (numsSets.has(currentNumber)) {
            // 如果目前的數字已經出現過,表示包含重複的數字,跳開不用再檢查了
            isContainDuplicateNumber = true;
            break;
        }

        // 將不重複的數字加入 Set
        numsSets.add(currentNumber);
    }

    return isContainDuplicateNumber;
};

參考資料