LeetCode - Contains Duplicate II

hatbanยท2022๋…„ 9์›” 14์ผ

๐Ÿ’กContains Duplicate II

โœ”๏ธ ๋ฌธ์ œ ๋งํฌ

https://leetcode.com/explore/learn/card/hash-table/184/comparison-with-other-data-structures/1121/

์ฒ˜์Œ์—๋Š” for๋ฌธ์„ ๋Œ๋ฉด์„œ nums์˜ i๋ฒˆ์งธ ์ธ๋ฑ์Šค ์ดํ›„์— nums์— nums[i]๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค์‹œ for๋ฌธ์„ ๋Œ๋ฉด์„œ j-i๊ฐ€ k๋ณด๋‹ค ์ž‘์€๊ฒŒ ์žˆ์œผ๋ฉด return trueํ•ด์ฃผ๋ ค๊ณ  ํ–ˆ๋‹ค.

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {boolean}
 */
var containsNearbyDuplicate = function(nums, k) {
    let len = nums.length;
    
    for(let i = 0; i<len; i++){
        let num = nums[i];
		if(nums.includes(num, i+1){
        	for(let j = i+1; j<len; j++){
        		if(nums[j] === num && j-i <=k) return true;
        	}   	
        }
    }
    return false;
};
  • ์˜ˆ์ƒ์€ ํ–ˆ์ง€๋งŒ ์—ญ์‹œ๋‚˜ time out!
  • ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ–ˆ๋‹ค


Map์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ

javascript๋Š” [ํ‚ค,๊ฐ’]์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ Map๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
Map์„ ์ด์šฉํ•ด ํ•ด๊ฒฐํ–ˆ๋‹ค

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

numMap์ด๋ผ๋Š” ์ƒˆ๋กœ์šด Map๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  nums๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ numMap์— ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
์žˆ์„๊ฒฝ์šฐ ์ค‘๋ณต๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ํ™•์ธ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นœ๋‹ค

numMap์˜ ํ‚ค๊ฐ’์€ nums์˜ ๊ฐ’์ด ๋˜๊ณ , numMap์˜ ๊ฐ’์€ nums์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋œ๋‹ค => numMap.set(nums[i], i);
๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๊ฐ’์„ ๋น„๊ตํ•ด ์ ˆ๋Œ€๊ฐ’์ด k๋ณด๋‹ค ์ž‘์œผ๋ฉด true๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค์‹œ numMap์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด nums = [1,2,3,1,1,1]์ด๊ณ , k๊ฐ€ 1์ด๋ผ๊ณ  ํ•˜๋ฉด i๊ฐ€ 2์ผ๋•Œ๊นŒ์ง€๋Š” numMap = [1:0, 2:1, 3:2]์ด๋‹ค.
i๊ฐ€ 3์ด ๋˜๋ฉด numMap์—๋Š” 1์ด ์ด๋ฏธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— if๋ฌธ์„ ๊ฑฐ์นœ๋‹ค
numMap.get(nums[i]) ๋Š” 0์ด๊ณ , i๋Š”3์ด๋ผ 0-3์˜ ์ ˆ๋Œ€๊ฐ’์€ 3์ด๋ผ k๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์ง€ ์•Š๋‹ค.
๋”ฐ๋ผ์„œ numMap.set์œผ๋กœ ์ธํ•ด numMap = [1:3, 2:1,3:2]๊ฐ€ ๋œ๋‹ค


์ด์ œ i๊ฐ€ 4๊ฐ€ ๋˜๋ฉด numMap์—๋Š” ์—ญ์‹œ 1์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— if๋ฌธ์„ ๊ฑฐ์นœ๋‹ค
numMap.get(nums[i]) ๋Š” 3์ด๊ณ  i๋Š” 4๋ผ์„œ 3-4์˜ ์ ˆ๋Œ€๊ฐ’์€ 1์ด๋ผ k์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€