题解 | #在两个长度相等的排序数组中找到上中位数#
在两个长度相等的排序数组中找到上中位数
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; }