4.寻找两个正序数组的中位数
题目描述
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
示例1
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例2
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例3
输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例4
输入:nums1 = [], nums2 = [1]
输出:1.00000
示例5
输入:nums1 = [2], nums2 = []
输出:2.00000
提示
- nums1.length == m
- nums2.length == n
- 0 <= m <= 1000
- 0 <= n <= 1000
- 1 <= m + n <= 2000
- -10^6 <= nums1[i], nums2[i] <= 10^6
- 再不用归并算法和默认合并排序算法的情况下解决问题
代码演示
Java
public class OneQuestionPerDay4 {
public static void main(String[] args) {
Solution04 s = new Solution04();
int nums1_1[] = {1,3};
int nums1_2[] = {2};
System.out.println(s.findMedianSortedArrays(nums1_1,nums1_2));
int nums2_1[] = {1,2};
int nums2_2[] = {3,4};
System.out.println(s.findMedianSortedArrays(nums2_1,nums2_2));
int nums3_1[] = {0,0};
int nums3_2[] = {0,0};
System.out.println(s.findMedianSortedArrays(nums3_1,nums3_2));
int nums4_1[] = {};
int nums4_2[] = {1};
System.out.println(s.findMedianSortedArrays(nums4_1,nums4_2));
int nums5_1[] = {2};
int nums5_2[] = {};
System.out.println(s.findMedianSortedArrays(nums5_1,nums5_2));
int nums6_1[] = {3,4};
int nums6_2[] = {};
System.out.println(s.findMedianSortedArrays(nums6_1,nums6_2));
}
}
class Solution{
public float findMedianSortedArrays(int[] nums1,int[] nums2) {
int i = 0,j = 0,k = 0;
int n1 = nums1.length,n2 = nums2.length,n3 = n1 + n2;
int result[] = new int[n3];
while((i <= n1-1) && (j <= n2 - 1)){
if(nums1[i] <= nums2[j]){
result[k] = nums1[i];
k++;
i++;
}else{
result[k] = nums2[j];
k++;
j++;
}
}
if(i >= n1-1){
while (j != n2){
result[k] = nums2[j];
k++;
j++;
}
}
if(j >= n2-1){
while (i != n1){
result[k] = nums1[i];
k++;
i++;
}
}
if(n3 % 2 == 0){
float r = (result[n3/2] + result[(n3/2)-1]);
return r/2;
}else{
return (float)result[(n3-1)/2];
}
}
}
Java 提交结果
执行用时:3 ms, 在所有 Java 提交中击败了82.27% 的用户
内存消耗:39.3 MB, 在所有 Java 提交中击败了97.71% 的用户