IT/Problem Solving
[LeetCode] Median of Two Sorted Arrays (Java)
erinh
2024. 2. 4. 20:54
반응형
문제
문제풀이
감을 못 잡겠어서 이건 힌트를 보고 풀었다!
사실 이진탐색만 알면 간단하게 풀리는 문제인데, 개념을 매번 까먹었다가
아래 유튜브 영상을 보고 완벽하게 이해할 수 있었다. 구우우웃-!
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
if (nums1.length > nums2.length) {
return findMedianSortedArrays(nums2, nums1);
}
// binary search
int partitionLen = (nums1.length + nums2.length + 1) / 2;
boolean isEven = (nums1.length + nums2.length) % 2 == 0;
int st = 0;
int ed = nums1.length;
while (st <= ed) {
int nums1Idx = (st + ed) / 2;
int nums2Idx = partitionLen - nums1Idx;
int nums1Left = nums1Idx - 1 >= 0 ? nums1[nums1Idx - 1] : Integer.MIN_VALUE;
int nums1Right = nums1Idx < nums1.length ? nums1[nums1Idx] : Integer.MAX_VALUE;
int nums2Left = nums2Idx - 1 >= 0 ? nums2[nums2Idx - 1] : Integer.MIN_VALUE;
int nums2Right = nums2Idx < nums2.length ? nums2[nums2Idx] : Integer.MAX_VALUE;
if (nums1Left <= nums2Right && nums1Right >= nums2Left) {
if (isEven) {
return ((Math.max(nums1Left, nums2Left) + Math.min(nums1Right, nums2Right)) / 2.0);
} else {
return Math.max(nums1Left, nums2Left);
}
} else if (nums1Left > nums2Right) {
ed = nums1Idx - 1;
} else {
st = nums1Idx + 1;
}
}
}
반응형