题解 | #在两个长度相等的排序数组中找到上中位数#

在两个长度相等的排序数组中找到上中位数

http://www.nowcoder.com/practice/6fbe70f3a51d44fa9395cfc49694404f

来自第三方平平台的答案

    public int findMedianinTwoSortedAray (int[] arr1, int[] arr2) {
        // write code here
        int len1 = arr1.length, len2 = arr2.length;
        int k = (len1+len2+1)/2;
        return getMid(arr1, 0, len1-1, arr2, 0, len2-1, k);
    }
    // 求出arr1和arr2中第k小的数
    int getMid(int[] arr1, int start1, int end1, int[] arr2, int start2, int end2, int k){
        int len1 = end1-start1+1, len2 = end2-start2+1;
        if (len1 > len2) return getMid(arr2, start2, end2, arr1, start1, end1, k);
        if (len1 == 0) return arr2[start2+k-1];
        if (k == 1) return Math.min(arr1[start1], arr2[start2]);

        int i = start1+Math.min(len1, k/2)-1;
        int j = start2+Math.min(len2, k/2)-1;
        if (arr1[i] > arr2[j]){
            return getMid(arr1, start1, end1, arr2, j+1, end2, k-(j-start2+1));
        }else{
            return getMid(arr1, i+1, end1, arr2, start2, end2, k-(i-start1+1));
        }
    }
全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
头像
10-15 22:27
已编辑
门头沟学院 C++
罗格镇的小镇做题家:我投了hr打电话来说学历太低了不符合要求,建议投荣耀,结果荣耀也投了一定水花没有,非本211硕
投递华为等公司10个岗位
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务