思路一:
归并过程然后取中值。这是一个思路,比较费时间。
import java.util.*;
public class Solution {
/**
* find median in two sorted array
* @param arr1 int整型一维数组 the array1
* @param arr2 int整型一维数组 the array2
* @return int整型
*/
public int findMedianinTwoSortedAray (int[] arr1, int[] arr2) {
// write code here
int[] D=merge(arr1,arr1.length,arr2,arr2.length);
//D的长度一定是偶数 题目给出
return D[D.length/2-1];//所以这里一定要减去1 可以使用一个测试用例来参考
}
public int[] merge(int A[], int m, int B[], int n) {
int[] help=new int[m+n];
int p1=0,p2=0,i=0;
while(p1<m&&p2<n){
help[i++]=A[p1]<B[p2]?A[p1++]:B[p2++];
}
while(p1<m){
help[i++]=A[p1++];
}
while(p2<n){
help[i++]=B[p2++];
}
return help;
}
}
思路二:
在两个数组中分别取最小值,直到第n个结束就是中值。
import java.util.*;
public class Solution {
/**
* find median in two sorted array
* @param arr1 int整型一维数组 the array1
* @param arr2 int整型一维数组 the array2
* @return int整型
*/
public int findMedianinTwoSortedAray (int[] arr1, int[] arr2) {
// write code here
// 从两个数组不断找较小者,找到第n个就返回。
int l = 0, r = 0;
int res = 0;
while(l + r < arr1.length){
if(arr2[r] < arr1[l])
res = arr2[r++];
else
res = arr1[l++];
}
return res;
}
}

京公网安备 11010502036488号