j今天刷的题是LeetCode第4题,给定两个有序数组,输出合并数组后的中位数。可以假设两个数组不同时为空
开始自己的想法是,设定两个指针,然后当两个指针中较小的哪一个,该指针就加1,但是这里面要考虑很多问题,首先是两个数组的越界问题,另一个问题是,两个数组中,如果有一个已经遍历完了,还没找到相应的中位数,这时候就需要判断是哪个遍历完了,然后继续查找。条件很多,写的都快爆炸了。煎熬了两个小时,最后放弃了。选择了LeetCode的官方解答思路。具体地代码如下:
public double findMedianSortedArrays(int[] A, int[] B) { int m = A.length; int n = B.length; int len = m + n; int left = -1, right = -1; int aStart = 0, bStart = 0; for (int i = 0; i <= len / 2; i++) { left = right; if (aStart < m && (bStart >= n || A[aStart] < B[bStart])) { right = A[aStart++]; } else { right = B[bStart++]; } } if ((len & 1) == 0) //表示长度为奇数 return (left + right) / 2.0; else return right; }