给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
示例 1:
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int nums1L = nums1.length;
int nums2L = nums2.length;
double result = 0;
int i = 0, j = 0, k = 0;
int[] num = new int[nums1L + nums2L];
while(i < nums1L && j < nums2L){
if(nums1[i] < nums2[j]) num[k++] = nums1[i++];
else num[k++] = nums2[j++];
}
while(i == nums1L && j < nums2L){
num[k++] = nums2[j++];
}
while(i < nums1L && j == nums2L){
num[k++] = nums1[i++];
}
if(num.length % 2 == 0){
result = ((double)(num[num.length / 2] + num[num.length / 2 -1]))/2;
}
else{
result = (double)(num[num.length / 2]);
}
return result;
}
}
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
List<Integer> list = new ArrayList<>();
list.addAll(Arrays.stream(nums1).boxed().collect(Collectors.toList()));
list.addAll(Arrays.stream(nums2).boxed().collect(Collectors.toList()));
Collections.sort(list);
if (list.size() == 0){
return 0;
}
if(list.size()%2>0){
return list.get(((list.size()+1)/2)-1);
}else {
int a = list.size()/2;
return (double)(list.get(a) +list.get(a-1))/2;
}
}
}