#4 寻找两个正序数组的中位数
分类:数组
难度:困难
寻找两个正序数组的中位数
【思路】设置两个指针遍历两个数组(不要忘了特殊情况的判断!!!)
/**
* leetcode hot100 https://leetcode-cn.com/problemset/hot-100/
* #4 寻找两个正序数组的中位数 困难
* 20200508
*
* 题目描述:
* 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
*
* 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
*
* 你可以假设 nums1 和 nums2 不会同时为空。
*
* 示例:
* nums1 = [1, 3]
* nums2 = [2]
* 则中位数是 2.0
*
* nums1 = [1, 2]
* nums2 = [3, 4]
* 则中位数是 (2 + 3)/2 = 2.5
*/
import java.rmi.MarshalException;
import java.util.List;
public class test4 {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
double Median=0;
int m=nums1.length;
int n=nums2.length;
int[] num=new int[m+n];
if(m==0&&n==0){
return 0;
}
if(m==0){
if(n%2==0){
Median=((double)nums2[n/2-1]+(double)nums2[n/2])/2;
}
else
Median=nums2[n/2];
}
if(n==0){
if(m%2==0){
Median=((double)nums1[m/2-1]+(double)nums1[m/2])/2;
}
else
Median=nums1[m/2];
}
if(m!=0 && n!=0){
for(int i=0,j=0,k=0;i<m+n;i++){
if(j!=m && k!=n) {
if (nums1[j] < nums2[k]) {
num[i] = nums1[j];
j++;
} else {
num[i] = nums2[k];
k++;
}
}
if(j==m && k<n){
num[i+1]=nums2[k];
k++;
}
if(k==n && j<m){
num[i+1]=nums1[j];
j++;
}
if(j==m && k==n){
break;
}
}
int length=m+n;
if(length%2==0){
length=(m+n)/2;
Median=((double)num[length-1]+(double)num[length])/2;
}
else{
length=length/2;
Median=num[length];
}
}
return Median;
}
public static void main(String args[]){
test4 te4=new test4();
int[] nums1={};
int[] nums2={1,7};
double jieguo=te4.findMedianSortedArrays(nums1,nums2);
System.out.println(jieguo);
}
}