leetCode/NeetCode

[Easy] 217. Contains Duplicate

개발자 자두 2022. 8. 2. 23:15

문제

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 배열 요소 중 중복되는 값이 있다면 true, 없으면 false를 반환하라.

 

예시

Example 1:

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

Example 2:

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

Example 3:

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

 

제약 조건

Constraints:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

 

해결 과정

1차적으로 문제에 맞게 직관적으로 해결을 해보았다. 하지만 이 방법은 시간복잡도가 N^2으로, 많은 시간이 소모된다.

2차로 Set를 활용하여 문제를 해결해보았다. 코드도 훨씬 단순해지고 시간 복잡도도 크게 개선되었다.

 

해결 코드

1차

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    let array = [];
    
    for(let el of nums){
        if(array.indexOf(el) === -1){
            array.push(el);
        }else{
            return true;
        } 
    }
    return false;
};

 

2차

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    let newSet = new Set(nums);
    if(newSet.size !== nums.length) return true;
    else return false;
};