leetcode刷题17

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;
    }

 

posted @ 2019-08-26 21:14  刘云生  阅读(134)  评论(0编辑  收藏  举报