728x90
반응형
문제
길이가 m, n이고 오름차순으로 정렬되어 있는 자연수 배열들을 입력받아 전체 요소 중 k번째 요소를 리턴해야 합니다.
입력
인자 1 : arr1
- 자연수를 요소로 갖는 배열
- arr1.length는 m
인자 2 : arr2
- 자연수를 요소로 갖는 배열
- arr2.length는 n
인자 3 : k
- number 타입의 0 이상의 정수
출력
- number 타입을 리턴해야 합니다.
주의사항
- 두 배열의 길이의 합은 1,000,000 이하입니다.
- 어떤 배열 arr의 k번째 요소는 arr[k-1]을 의미합니다.
입출력 예시
let arr1 = [1, 4, 8, 10]; let arr2 = [2, 3, 5, 9]; let result = getItemFromTwoSortedArrays(arr1, arr2, 6); console.log(result); // --> 8 arr1 = [1, 1, 2, 10]; arr2 = [3, 3]; result = getItemFromTwoSortedArrays(arr1, arr2, 4); console.log(result); // --> 3
Advanced
- 단순히 처음부터 끝까지 찾아보는 방법(O(K)) 대신 다른 방법(O(logK))을 탐구해 보세요.
힌트
- 이진 탐색(binary search)을 응용하여 해결합니다.
풀이
아직까진 이해가 안된다.. 추후에 복습하면 이해가 될려나..
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
// naive solution
// const getItemFromTwoSortedArrays = function (arr1, arr2, k) {
// let cnt = 0,
// left = 0,
// right = 0;
// let target;
// while (cnt < k) {
// if (arr1[left] < arr2[right]) {
// target = arr1[left];
// left++;
// } else {
// target = arr2[right];
// right++;
// }
// cnt++;
// }
// return target;
// };
const getItemFromTwoSortedArrays = function (arr1, arr2, k) {
let leftIdx = 0,
rightIdx = 0;
while (k > 0) {
let cnt = Math.ceil(k / 2);
let leftStep = cnt,
rightStep = cnt;
if (leftIdx === arr1.length) {
rightIdx = rightIdx + k;
break;
}
if (rightIdx === arr2.length) {
leftIdx = leftIdx + k;
break;
}
if (cnt > arr1.length - leftIdx) leftStep = arr1.length - leftIdx;
if (cnt > arr2.length - rightIdx) rightStep = arr2.length - rightIdx;
if (arr1[leftIdx + leftStep - 1] < arr2[rightIdx + rightStep - 1]) {
leftIdx = leftIdx + leftStep;
k = k - leftStep;
} else {
rightIdx = rightIdx + rightStep;
k = k - rightStep;
}
}
leftMax = arr1[leftIdx - 1] || -1;
rightMax = arr2[rightIdx - 1] || -1;
return Math.max(leftMax, rightMax);
};
|
cs |
728x90
반응형
'Computer Science > Algorithm' 카테고리의 다른 글
[LeetCode] 2. Add Two Numbers : LinkedList (0) | 2021.12.19 |
---|---|
[LeetCode] 1. Two Some (0) | 2021.12.15 |
Prm 12 : Tree BFS (0) | 2021.01.13 |
Prm 17 : balancedBrackets / stack, in 연산자 객체 적용 (0) | 2021.01.11 |
quickSort / 퀵정렬 (0) | 2021.01.10 |