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
- 프로세스
- 해시테이블
- 자료구조
- 큐
- 연결리스트
- 컨테이너
- APOLLO
- Machine Learning
- GraphQL
- 릿코드
- 프로그래머스
- 자바스크립트
- 알고리즘
- cors
- 연결 리스트
- 배열
- 코딩테스트
- alexnet
- RxJS
- pytorch
- C
- RT scheduling
- 스택
- 타입스크립트
- 웹팩
- 이진탐색
- vue3
- 프론트엔드
- 포인터
- 브라우저
Archives
- Today
- Total
프린세스 다이어리
[LeetCode] Find K Closest Elements - 자바스크립트 풀이 본문
728x90
1. 접근 방법
(1) 주어지는 배열이 오름차순 정렬돼 있고, 특정 조건에 따라 피벗 값을 기준으로 검사 위치를 변경해가며 푸는 문제이므로 이진 탐색 문제다.
(2) left는 나중에 slice할 범위의 왼쪽 끝 인덱스다.
(3) right가 arr.length - k로 초기화되어 있는 이유는 left 인덱스로부터 k만큼 자르기 위해 가능한 최대 인덱스이기 때문이다.
let left = 0;
let right = arr.length - k;
(4) left <= right 로 while문을 도는 이유는 mid 값을 특정해서 알아내어 slice할 때 인덱스로 사용하고 싶어서다.
while (left <= right) {
let mid = left + Math.floor((right - left) / 2);
// ...
}
(5) 지금 mid 인덱스의 값과 x 까지의 차이와, mid + k 인덱스의 값과 x 까지의 차이를 비교한다.
비교해서 더 작은 쪽으로 left, right를 옮긴다.
while (left <= right) {
let mid = left + Math.floor((right - left) / 2);
if (x - arr[mid] > arr[mid + k] - x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
(6) left부터 left + k까지 길이 k의 배열을 잘라 리턴한다.
return arr.slice(left, left + k);
2. 전체 해답
/**
* @param {number[]} arr
* @param {number} k
* @param {number} x
* @return {number[]}
*/
var findClosestElements = function(arr, k, x) {
let left = 0;
let right = arr.length - k;
while (left <= right) {
let mid = left + Math.floor((right - left) / 2);
if (x - arr[mid] > arr[mid + k] - x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return arr.slice(left, left + k);
};
의문만 남은 답안.,, 그냥 외우자^^!
728x90
'자료구조, 알고리즘' 카테고리의 다른 글
[LeetCode] Valid Perfect Square - 자바스크립트 풀이 (0) | 2021.11.29 |
---|---|
[LeetCode] Pow(x, n) 문제 - 자바스크립트 풀이 (0) | 2021.11.29 |
[LeetCode] Search for a Range - 자바스크립트 풀이 (0) | 2021.11.28 |
[LeetCode] Find Minimum in Rotated Sorted Array - 자바스크립트 풀이 (0) | 2021.11.28 |
[LeetCode] Find Peak Element - 자바스크립트 풀이 (0) | 2021.11.28 |
Comments