개발일지/TIL
[leetcode] 219. Contains Duplicate II
JangKroed
2023. 8. 31. 23:08
728x90
반응형
Contains Duplicate II
Given an integer array nums and an integer k, return true if there are two distinct indices i and j in the array such that nums[i] == nums[j] and abs(i - j) <= k.
Example 1:
Input: nums = [1,2,3,1], k = 3
Output: true
Example 2:
Input: nums = [1,0,1,1], k = 1
Output: true
Example 3:
Input: nums = [1,2,3,1,2,3], k = 2
Output: false
Constraints:
- 1 <= nums.length <= 105
- -109 <= nums[i] <= 109
- 0 <= k <= 105
풀이 - 1
function containsNearbyDuplicate(nums: number[], k: number): boolean {
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < nums.length; j++) {
if (i === j) {
continue;
}
if (nums[i] === nums[j] && Math.abs(i - j) <= k) {
return true;
}
}
}
return false;
}
무식하게 구현하니 무식한 숫자가 당황스럽게 했다.. 역시 최적화가 필요하다..
풀이 - 2
function containsNearbyDuplicate(nums: number[], k: number): boolean {
const obj: { [key: number]: number } = {};
for (let i = 0; i < nums.length; i++) {
if (obj[nums[i]] && Math.abs(obj[nums[i]] - i) <= k) {
return true;
}
obj[nums[i]] = i;
}
return false;
}
시간복잡도 O(n)에 맞게 코드를 짜보았는데 nums = [1, 2, 3, 1], k = 3의 케이스에서 true를 반환해야하는데 false를 반환하여 오답처리되었다.
아마 키값으로 먼저 들어간 1이 나중에 들어가는 1의 값과 다르다고 인식되어 생기는 문제로 추정된다..
풀이 - 3
function containsNearbyDuplicate(nums: number[], k: number): boolean {
const hashMap: Map<number, number> = new Map<number, number>();
for (let i = 0; i < nums.length; i++) {
if (hashMap.has(nums[i]) && Math.abs(hashMap.get(nums[i])! - i) <= k) {
return true;
}
hashMap.set(nums[i], i);
}
return false;
}
풀이 - 2와 유사한 로직에서 자료구조만 Map을 사용하였는데 Object는 안되고 Map은 되는 자세한이유를 알아보아야겠다..
728x90
반응형