题解 | #在两个长度相等的排序数组中找到上中位数#
在两个长度相等的排序数组中找到上中位数
http://www.nowcoder.com/practice/6fbe70f3a51d44fa9395cfc49694404f
思路:
1.如果某个数组末尾值小于等于另一个数组的初始值,直接返回某个数组的末尾值。
2.根本不用在意奇数还是偶数,因为是两个数组融合的中位数,必是偶数。
3.设定一个计数值记录当前是第几小的数。
4.循环依次寻找两个数组中较小的值,找到了把指针向后移动,并把返回值设为当前的较小值。
public int findMedianinTwoSortedAray (int[] arr1, int[] arr2) {
// write code here
int N=arr1.length;
if(arr1[N-1]<=arr2[0]){
return arr1[N-1];
}
if(arr2[N-1]<=arr1[0]){
return arr2[N-1];
}
int res=0;//返回值
int cnt=0;//记录是第几次循环,每一次都找最小值。
int p=0,q=0;
while(cnt<N){
//当前是arr1的值比较小,把它赋值给res,并把指针后移。
if(arr1[p]<arr2[q]){
res=arr1[p];
p++;
}
else{//当前是arr2的值比较小,把它赋值给res,并把指针后移。
res=arr2[q];
q++;
}//计数值加1
cnt++;
}
return res;
}
