Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- 배열
- 연결리스트
- 프론트엔드
- 자바스크립트
- 스택
- alexnet
- 자료구조
- 큐
- 웹팩
- pytorch
- Machine Learning
- 코딩테스트
- APOLLO
- RT scheduling
- 브라우저
- 해시테이블
- GraphQL
- 프로세스
- 타입스크립트
- 컨테이너
- RxJS
- 이진탐색
- cors
- 포인터
- 알고리즘
- C
- 릿코드
- 연결 리스트
- vue3
Archives
- Today
- Total
프린세스 다이어리
[LeetCode] Find Peak Element - 자바스크립트 풀이 본문
728x90
이진탐색으로 푸는 것 자체는 별로 어렵진 않았으나 슬슬 이진탐색 풀이가 필요하다는 것을 떠올리기 힘들 것 같음
1. 접근 방법
(1) 정렬이 돼 있지 않은 nums가 주어짐에도 문제가 이진 탐색 분류 내에 있는 이유는 역시 기준 mid의 양옆 원소를 비교해서 왼쪽이 클 때와 오른쪽이 클 때를 구분하는 로직이 필요하기 때문임
(2) mid의 양옆 원소가 mid보다 작으면 mid 리턴.
if (nums[mid - 1] < nums[mid] && nums[mid] > nums[mid + 1]) return mid;
(3) mid의 원소가 mid+1의 원소보다 작으면 left를 mid의 오른쪽으로 넘겨줌.
(4) mid의 원소가 mid+1의 원소보다 보다 크면 right를 mid 값으로 옮겨줌.
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
2. 전체 풀이
var findPeakElement = function(nums) {
if (nums.length === 1) return 0;
let left = 0;
let right = nums.length;
let mid = 0;
while (left < right) {
mid = left + Math.floor((right - left) / 2);
if (nums[mid - 1] < nums[mid] && nums[mid] > nums[mid + 1]) return mid;
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
};
Math.floor((left - right) / 2) 로 오타를 계속 내고 있어서 1시간 삽질 ㅋ
728x90
'자료구조, 알고리즘' 카테고리의 다른 글
[LeetCode] Search for a Range - 자바스크립트 풀이 (0) | 2021.11.28 |
---|---|
[LeetCode] Find Minimum in Rotated Sorted Array - 자바스크립트 풀이 (0) | 2021.11.28 |
[LeetCode] First Bad Version - 자바스크립트 풀이 (0) | 2021.11.28 |
[LeetCode] Search in Rotated Sorted Array - 자바스크립트 풀이 (0) | 2021.11.28 |
[LeetCode] Sqrt 문제 - 자바스크립트 풀이 (0) | 2021.11.27 |
Comments