题解 | 牛的体重排序

牛的体重排序

https://www.nowcoder.com/practice/1afd5afef2aa49a8a39b63bb9d2821f9

import java.util.*;


public class Solution {
    private int n;
    private int m;

    public double findMedianSortedArrays (int[] weightsA, int[] weightsB) {
        this.m = weightsA.length;
        this.n = weightsB.length;
        if (((m + n) & 1) == 1) {
            // find 1 + ((m + n) >> 1)
            return getKthInTwoArray(weightsA, weightsB, 1 + ((m + n) >> 1));
        } else {
            // find 1 + ((m + n) >> 1)
            // find ((m + n) >> 1)
            return 0.5d * (getKthInTwoArray(weightsA, weightsB, 1 + ((m + n) >> 1)) + getKthInTwoArray(weightsA, weightsB, (m + n) >> 1));
        }
    }

    private double getKthInTwoArray(final int[] a, final int[] b, int k) {
        int i = 0, j = 0;
        while (true) {
            if (i == m) {
                return b[j + k - 1];
            }
            if (j == n) {
                return a[i + k - 1];
            }
            if (k == 1) {
                return Math.min(a[i], b[j]);
            }
            final int maxi = Math.min(i + k / 2 - 1, m - 1);
            final int maxj = Math.min(j + k / 2 - 1, n - 1);
            if (a[maxi] <= b[maxj]) {
                k -= maxi - i + 1;
                i = maxi + 1;
            } else {
                k -= maxj - j + 1;
                j = maxj + 1;
            }
        }
    }
}

全部评论

相关推荐

04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务