leetcode第4题 求两个数组的中位数
2019-06-13 本文已影响0人
CoderAPang
@(LeetCode)[数组]
leetcode 4 Median of Two Sorted Arrays
描述:求两个数组的中位数
方法:设定两个“指针”i和j分别指向两个数组当前需要比较的位置。
边界讨论:
1、当其中一个数组为空时:直接计算
2、当两个数组都只有一个元素时:直接计算
3、当其中一个数组已经遍历完最后一个元素时:每次比较都将两个数组中较大的数置于此处,防止越界
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
int midNumber1 = (m+n)%2==0?(m+n)/2:(m+n)/2+1;
int midNumber2 = (m+n)/2+1;
double ans = 0;
if(m==1&&n==1){
ans = (nums1[0]+nums2[0]);
ans /=2;
return ans;
}
if(m==0){
ans=nums2[midNumber1-1]+nums2[midNumber2-1];
ans /=2;
return ans;
}
if(n==0){
ans=nums1[midNumber1-1]+nums1[midNumber2-1];
ans /=2;
return ans;
}
int i=0,j=0;int num = 0;
while(num<midNumber2){
num++;
if(num==midNumber1){ans =Math.min(nums1[i],nums2[j]);}
if(num==midNumber2){ans +=Math.min(nums1[i],nums2[j]);}
if(nums1[i] > nums2[j]){
if(j==n-1){
int temp = nums2[j];
nums2[j] =nums1[i];
nums1[i]=temp;
i++;
}else{j++;}
}else{
if(i==m-1){
int temp = nums2[j];
nums2[j] =nums1[i];
nums1[i]=temp;
j++;
}else{
i++;
}
}
}
ans =ans/2;
return ans;
}
}