一、题目
1、原题链接
2、题目详情
给定两个大小分别为 m m m 和 n n n 的正序(从小到大)数组
nums1
和nums2
。请你找出并返回这两个正序数组的 中位数。
二、解题思路
(1)本题需要我们找到两个正序数组的中位数,则需要我们把两个数组合并之后才能再找到数组,那么我们要怎么合并这两个数组呢?
j
a
v
a
java
java中我们可以重新写一个合并两个数组数组的函数,代码如下:
static int[] concat(int[] a, int[] b) {
int[] c= new int[a.length+b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
代码使用了
j
a
v
a
java
java库中的
a
r
r
a
y
c
o
p
y
arraycopy
arraycopy函数来实现。
(2)合并完两个数组之后,我们发现合并后的数组并不是一个递增的数组,所以我们需要对合并后数组进行排序,
j
a
v
a
java
java中有
A
r
r
a
y
s
.
s
o
r
t
(
)
Arrays.sort()
Arrays.sort()函数可以将数组排序。
(3)将数组排完序后,即可分数组长度的奇偶来找到中位数。
三、代码
class Solution {
static int[] concat(int[] a, int[] b) {
int[] c= new int[a.length+b.length];
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n = nums1.length;
int m = nums2.length;
int[] ret =new int [m+n];
ret = concat(nums1,nums2);
Arrays.sort(ret);
double ans =0;
if((m+n)%2==0){
ans = (ret[(m+n)/2]+ret[(m+n)/2-1])/2.0;
}
else{
ans = ret[(int)(m+n)/2];
}
return ans;
}
}