๐๋ฌธ์
ENG
Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n)).
KOR
ํฌ๊ธฐ๊ฐ ๊ฐ๊ฐ m๊ณผ n์ธ ๋ ๊ฐ์ ์ ๋ ฌ๋ ๋ฐฐ์ด nums1๊ณผ nums2๊ฐ ์ฃผ์ด์ง๋ฉด ๋ ๊ฐ์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ค์๊ฐ์ ๋ฐํํด์ผ ํ๋ค.
์ ์ฒด ์คํ ์๊ฐ ๋ณต์ก๋๋ O(log(m+n))์ฌ์ผ ํ๋ค.
๐์์
Input: nums1 = [1,3], nums2 = [2]
Output: 2.00000
Explanation: merged array = [1,2,3] and median is 2.
Input: nums1 = [1,2], nums2 = [3,4]
Output: 2.50000
Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
๐ํ์ด ์ค๋ช
- ๊ธธ์ด๋ฅผ ๋ณ์์ ๋ด์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ธํด์ฃผ์๋ค.
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n = nums1.length;
int m = nums2.length;
}
- ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฃผ์๋ค.
- ๊ธธ์ด๋ ์ ๋ ฅ๋๋ ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ํด ๋ฐ์ผ๋ก ๋๋๊ณ +1์ ํด์ฃผ์๋ค.
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
...
int[] arr = new int[(m + n) / 2 + 1];
}
- ์ฒซ ๋ฒ์งธ ๋ฐฐ์ด์ ๊ธธ์ด ๋น๊ต๋ฅผ ์ํ ๋ณ์์ ๋ ๋ฒ์งธ ๋ฐฐ์ด์ ๊ธธ์ด ๋น๊ต๋ฅผ ์ํ ๋ณ์๋ฅผ ๊ฐ๊ฐ ์ ์ธํ ํ ์ด๊ธฐํ ํด์ฃผ์๋ค.
- ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ์ซ์์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ์ฌ ์๋ก์ด ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ์๋ค.
- ์กฐ๊ฑด๋ฌธ์ ๊ธธ์ด ๋น๊ต๋ฅผ ์ํ ๊ฒ์ธ๋ฐ, ๋ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๋ค๋ฅผ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋น๊ตํ์ฌ ๋ ์์ ์๋ฅผ ์ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ์๋ค.
- ๋ ๋ฐฐ์ด์ด ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
...
while (one + two < arr.length) {
if (one == n) {
arr[one + two] = nums2[two++];
} else if (two == m) {
arr[one + two] = nums1[one++];
} else {
arr[one + two] = nums1[one] < nums2[two] ?
nums1[one++] : nums2[two++];
}
}
}
- ๊ทธ๋ฆฌ๊ณ ๋ฆฌํด ๊ฐ์ ๊ณ์ฐํด์ฃผ์๋ค.
- ์๋ ์ฒ๋ผ ๊ณ์ฐ์์ ์ ์ด์ฃผ๋ฉด, ๋ ๋ฐฐ์ด์ ํฉ์ด ํ์ ์ผ ๊ฒฝ์ฐ ๊ฐ์ ๊ฐ์ ๋ํ ํ ๋๋ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ๊ฐ์ ์ฐพ์ ์ ์๊ณ ๋ ๋ฐฐ์ด์ ํฉ์ด ์ง์์ผ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ์ค๊ฐ๊ฐ์ ๋ํด ๋๋์ด ์ฃผ์ด ์ค๊ฐ๊ฐ์ ์ฐพ์ ์ ์๋ค.
- 2.0์ผ๋ก ๋๋์ด์ค ์ด์ ๋ ๋๋๋ ๊ฐ์ด double์ด๊ฒ ํ๊ธฐ ์ํด์๋ค.
- ๋ง์ฝ 2๋ก ๋๋๋ค๋ฉด, ๋๋๊ธฐ ๊ณผ์ ์์ ์์์ ์ด ๋ ์๊ฐ๊ณ ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ด doubleํํ๋ก ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ด๋ค.
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
...
return (arr[(n + m) / 2] + arr[(n + m - 1) / 2]) / 2.0;
}
๐์ต์ข ํ์ด
public class MedianOfTwoSortedArrays {
public static void main(String[] args) {
int[] arr1 = {};
int[] arr2 = {2,4};
int[] num1 = {1,3,7};
int[] num2 = {2,4,5};
System.out.println(findMedianSortedArrays(arr1, arr2));
System.out.println(findMedianSortedArrays(num1, num2));
}
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n = nums1.length;
int m = nums2.length;
int[] arr = new int[(m + n) / 2 + 1];
int one = 0;
int two = 0;
while (one + two < arr.length) {
if (one == n) {
arr[one + two] = nums2[two++];
} else if (two == m) {
arr[one + two] = nums1[one++];
} else {
arr[one + two] = nums1[one] < nums2[two] ?
nums1[one++] : nums2[two++];
}
}
return (arr[(n + m) / 2] + arr[(n + m - 1) / 2]) / 2.0;
}
}
'์๊ณ ๋ฆฌ์ฆ > LeetCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 011.Container With Most Water JAVA (0) | 2022.12.26 |
---|---|
[LeetCode] 012. Integer to Roman JAVA (0) | 2022.12.23 |
[LeetCode] 008. String to Integer (atoi) JAVA (0) | 2022.12.21 |
[LeetCode]006. Zigzag Conversion JAVA (0) | 2022.12.21 |
[LeetCode]007. Reverse Integer JAVA (0) | 2022.12.19 |
๋๊ธ