개발일지/TIL

[leetcode] 219. Contains Duplicate II

2023. 8. 31. 23:08
목차
  1. Contains Duplicate II
  2. Example 1:
  3. Example 2:
  4. Example 3:
  5. Constraints:
  6. 풀이 - 1
  7. 풀이 - 2
  8. 풀이 - 3
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
반응형

'개발일지 > TIL' 카테고리의 다른 글

[leetcode] 148. Sort List  (0) 2023.09.04
[Hash Table 구현] Linear Probing 방식의 Hash Table을 구현해 보세요.  (0) 2023.09.04
[leetcode] 1. Two Sum  (0) 2023.08.31
[leetcode] 150. Evaluate Reverse Polish Notation  (0) 2023.08.31
[leetcode] 155. Min Stack  (0) 2023.08.31
  1. Contains Duplicate II
  2. Example 1:
  3. Example 2:
  4. Example 3:
  5. Constraints:
  6. 풀이 - 1
  7. 풀이 - 2
  8. 풀이 - 3
'개발일지/TIL' 카테고리의 다른 글
  • [leetcode] 148. Sort List
  • [Hash Table 구현] Linear Probing 방식의 Hash Table을 구현해 보세요.
  • [leetcode] 1. Two Sum
  • [leetcode] 150. Evaluate Reverse Polish Notation
JangKroed
JangKroed
JangKroed
JangKroed
JangKroed
전체
오늘
어제
  • FindAllPost() (139)
    • 항해99 (40)
      • TIL (19)
      • WIL (13)
      • 공부 (7)
    • 개발일지 (70)
      • 스파르타 게임개발 종합반 (1)
      • Error (5)
      • TIL (64)
    • Language (16)
      • Javascript (7)
      • Node.js (5)
      • TypeScript (0)
      • Nest.js (0)
      • Unity (4)
    • DataBase (3)
      • MySQL (2)
      • MongoDB (1)
    • DevOps (4)
      • AWS (4)
      • Docker (0)
    • Tools (5)
      • VScode (1)
      • Git (1)
      • libraries (3)
    • 끄적끄적 (1)
      • 메모 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

깃허브

공지사항

인기 글

태그

최근 댓글

최근 글

반응형
250x250
hELLO · Designed By 정상우.
JangKroed
[leetcode] 219. Contains Duplicate II
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.