알고리즘

[LeetCode] 162 Find Peak Element JavaScript

2022. 7. 15. 11:47

문제 링크

 

Find Peak Element - 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

 

문제 유형

이진 탐색 (Binary Search)

 

문제 풀이

이 문제는 완전 탐색을 통해 배열 내의 가장 큰 값을 찾고, 전/후 값을 비교해 peak elements인지 확인하는 방법이 있다. 이 경우, 시간 복잡도는 O(n)이다.
이 문제는 O(log n)의 시간복잡도를 갖도록 구현해야 하므로 이진 탐색을 이용하여 peak elements를 찾는다면 O(log n)의 시간 복잡도로 문제를 해결할 수 있다.

이 문제에서 유의할 점은 다음과 같다.

  • 다양한 peak elements가 나올 수 있다.
  • nums[-1] = nums[n] = -∞ 이므로 배열의 맨 처음/끝 값도 peak element가 될 수 있다.

nums = [1, 2, 1, 3, 5, 6, 4] 가 주어졌다고 하자.

1. 첫 이진 탐색의 범위는 배열의 처음과 끝이다. 처음과 끝의 중간값인 nums[pivot]과 pivot 다음 값인 nums[pivot + 1]을 비교한다. 다음 값이 더 크므로 다음 탐색 범위를 (pivot + 1) ~ 6으로 설정한다.

2. nums[pivot]과  nums[pivot + 1]을 비교한다. pivot의 값이 더 크므로 탐색 범위를 4 ~ pivot으로 설정한다.

3. nums[pivot]과 nums[pivot + 1]을 비교한다. pivot 다음 값이 더 크므로 탐색 범위를 (pivot + 1) ~ 5로 설정한다.

4. left와 right가 같으므로 탐색이 종료된다. left나 right를 반환하여 peak element의 index를 출력한다.

 

코드

// Binary Search (Time Complexity: O(log n))

var findPeakElement = function(nums) {
    let left = 0;
    let right = nums.length - 1;
    
    if (nums.length === 1) return 0;
    
    while (left < right) {
        const pivot = Math.floor((left + right) / 2);
        const num = nums[pivot]; // 해당 넘버
        const nextNum = nums[pivot + 1]; // pivot 오른쪽의 넘버
        if (num < nextNum) {
            left = pivot + 1;
        } else {
            right = pivot;
        }
    }
    return left;
};

 

참고

https://www.youtube.com/watch?v=zChSh4yOOCg

 

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

[LeetCode] 56 Merge Intervals JavaScript  (0) 2022.07.17
[LeetCode] 88 Merge Sorted Array JavaScript  (0) 2022.07.17
[LeetCode] 75 Sort Colors JavaScript  (0) 2022.07.13
[LeetCode] 209 Minimum Size Subarray Sum JavaScript  (0) 2022.07.12
[LeetCode] 724 Find Pivot Index JavaScript  (0) 2022.07.12
'알고리즘' 카테고리의 다른 글
  • [LeetCode] 56 Merge Intervals JavaScript
  • [LeetCode] 88 Merge Sorted Array JavaScript
  • [LeetCode] 75 Sort Colors JavaScript
  • [LeetCode] 209 Minimum Size Subarray Sum JavaScript
sandwe
sandwe
sandwe
sandwe
sandwe
전체
오늘
어제
  • 분류 전체보기 (69)
    • CSS (1)
    • 알고리즘 (35)
    • JavaScript (30)
      • 모던 자바스크립트 Deep Dive (30)
    • React (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

hELLO · Designed By 정상우.
sandwe
[LeetCode] 162 Find Peak Element JavaScript
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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