알고리즘

[LeetCode] 287 Find the Duplicate Number JavaScript

2022. 7. 18. 10:52

문제 링크

 

Find the Duplicate Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

문제 유형

배열

 

문제 풀이

이 문제는 배열 내 중복되는 숫자를 찾아 리턴하는 문제이다. 이 문제는 배열 내의 요소를 인덱스로 보는 방법을 통해 O(n)의 시간복잡도를 갖지만 공간복잡도가 다른 두 방법으로 접근할 수 있다.

  • 새로운 배열에 숫자 존재 여부를 표시하기
    nums 배열의 길이의 배열을 만들고, 배열을 순차적으로 접근한다. 현재 숫자에 해당하는 인덱스에 1을 표시한다. 만약, 현재 숫자에 해당하는 인덱스에 이미 1이 있으면 중복된 것으로 간주하고 해당 요소를 리턴한다.
    이는 새로운 배열을 만들어야 하므로 O(n)의 공간복잡도를 갖는다.

  • 숫자 존재 여부를 음수로 표시하기
    배열을 순차적으로 접근하면서 현재 숫자에 해당하는 인덱스의 요소에 -1을 곱한다. 만약 인덱스의 숫자가 이미 음수이면 중복된 것으로 간주하고 현재 숫자를 리턴한다.

 

다음과 같은 배열이 있다.

1 3 4 2 2

i = 0) 숫자는 1이므로 인덱스 1의 값을 음수로 바꾼다.

1 -3 4 2 2

i = 1) 숫자는 3이므로 인덱스 3의 값을 음수로 바꾼다.

1 -3 4 -2 2

i = 2) 숫자는 4이므로 인덱스 4의 값을 음수로 바꾼다.

1 -3 4 -2 -2

i = 3) 숫자는 2이므로 인덱스 2의 값을 음수로 바꾼다.

1 -3 -4 -2 2

i = 4) 인덱스 2의 값은 이미 음수이므로 2가 중복되는 숫자이다.

1 -3 -4 -2 -2

 

코드

// 1
var findDuplicate = function(nums) {
    const array = new Array(nums.length);
    
    for (let i = 0; i < nums.length; i++) {
        if (array[nums[i]] === 1) {
            return nums[i];
        }
        array[nums[i]] = 1;    
    }
    return 0;
};
// 2
var findDuplicate = function(nums) {
    for (let i = 0; i < nums.length; i++) {
        const num = Math.abs(nums[i]);
        if (nums[num] < 0) return num;
        nums[num] *= -1; 
    }
    return 0;
};

 

참고

https://www.youtube.com/watch?v=k6rsok-7zNA

'알고리즘' 카테고리의 다른 글

[LeetCode] 74 Search a 2D Matrix JavaScript  (0) 2022.07.20
[LeetCode] 48 Rotate Image JavaScript  (0) 2022.07.19
[LeetCode] 581 Shortest Unsorted Continuous Subarray JavaScript  (0) 2022.07.18
[LeetCode] 56 Merge Intervals JavaScript  (0) 2022.07.17
[LeetCode] 88 Merge Sorted Array JavaScript  (0) 2022.07.17
'알고리즘' 카테고리의 다른 글
  • [LeetCode] 74 Search a 2D Matrix JavaScript
  • [LeetCode] 48 Rotate Image JavaScript
  • [LeetCode] 581 Shortest Unsorted Continuous Subarray JavaScript
  • [LeetCode] 56 Merge Intervals JavaScript
sandwe
sandwe
sandwe
sandwe
sandwe
전체
오늘
어제
  • 분류 전체보기 (69)
    • CSS (1)
    • 알고리즘 (35)
    • JavaScript (30)
      • 모던 자바스크립트 Deep Dive (30)
    • React (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 해쉬 맵
  • 클로저
  • 투 포인터
  • javascript
  • 알고리즘
  • 선언적
  • 스프레드 문법
  • 이터러블
  • 이진 탐색
  • BFS
  • 프로토타입
  • Suspense
  • 백트래킹
  • 해시 테이블
  • 렌더링 과정
  • float
  • 프로그래머스
  • Error Boundary
  • 스택
  • dfs
  • Leetcode
  • map
  • 다이나믹 프로그래밍
  • 백준
  • Subsets
  • 구조 분해 할당
  • string
  • 표준 빌트인 객체
  • React Query
  • 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.
sandwe
[LeetCode] 287 Find the Duplicate Number JavaScript
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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