【leetcode】217. 중복 요소 존재

이 칼럼을 쓰는 목적은 주로 문제 해결을 위한 몇 가지 아이디어를 제공하는 것입니다. ! !

질문:
정수 배열 숫자가 주어졌습니다. 배열에서 값이 두 번 이상 발생하면 true를 반환하고, 배열의 모든 요소가 고유하면 false를 반환합니다.

예 1:

输入:nums = [1,2,3,1]
输出:true

예 2:

输入:nums = [1,2,3,4]
输出:false

예 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

힌트:

  • 1 <= 숫자 길이 <= 10 5
  • -10 9 <= 숫자[i] <= 10 9

솔루션 1: 중복 제거

아이디어: 배열을 중복 제거한 다음 원래 배열의 길이와 비교합니다.

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    
    
    const newNums = [...new Set(nums)]; // 去重
    return nums.length !== newNums.length; 
};

해결 방법 2: 정렬

아이디어: 숫자를 정렬한 후 인접한 요소만 비교하면 됩니다. 인접한 요소가 같으면 동일한 요소가 두 개 있다는 의미이며 true를 반환하고 그렇지 않으면 false를 반환합니다.

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    
    
    nums.sort((a,b) => a-b);
    for(let i = 0; i < nums.length - 1; i++) {
    
    
        if (nums[i] === nums[i+1]) {
    
    
            return true;
        }
    }
    return false;
};

솔루션 3: 해시 테이블

아이디어: 배열의 요소를 해시 테이블에 차례로 삽입 요소 삽입 시 요소가 존재하는 것으로 확인되면 해당 요소가 존재함을 나타냅니다.

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    
    
    const set = new Set();
    for (const x of nums) {
    
    
        if (set.has(x)) {
    
    
            return true;
        }
        set.add(x);
    }
    return false;
};

이 방법은 실제로 문제 해결 방법 1과 유사하며 둘 다 통과되지만 Set판단 방법은 다릅니다. 여전히 질문이 있는 경우 여기로Set 이동할 수 있습니다 .

다음은 몇 가지 일반적인 솔루션입니다. 더 나은 솔루션이 있으면 추가할 수 있습니다.

おすすめ

転載: blog.csdn.net/weixin_38629529/article/details/130160458