在两个长度相等的有序数组中查找上中位数

DESC:

题目描述

给定两个有序数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。

上中位数:假设递增序列长度为n,若n为奇数,则上中位数为第n/2+1个数;否则为第n/2个数

[要求]

时间复杂度为O(logN),额外空间复杂度为O(1)

示例1

输入

[1,2,3,4],[3,4,5,6]

返回值

3

说明

总共有8个数,上中位数是第4小的数,所以返回3。 

示例2

输入

[0,1,2],[3,4,5]

返回值

2

说明

总共有6个数,那么上中位数是第3小的数,所以返回2 

备注:

1≤N≤1051 \leq N \leq 10^51≤N≤105
0≤arr1i,arr2i≤1090 \leq arr_{1i}, arr_{2i} \leq 10^90≤arr1i​,arr2i​≤10

CODE:

JAVA:

import java.util.*;


public class Solution {
    /**
     * find median in two sorted array
     * @param arr1 int整型一维数组 the array1
     * @param arr2 int整型一维数组 the array2
     * @return int整型
     */
    public int findMedianinTwoSortedAray (int[] arr1, int[] arr2) {
        // write code here
        int num = arr1.length;
        int res=0, i=0, j=0;
        while (num > 1) {
            if (arr1[i] <= arr2[j]) {
                i++;
            } else {
                j++;
            }
            num--;
        }
        return Math.min(arr1[i], arr2[j]);
    }
}

NOTES:

  1. 因为数组长度都为n,所以上位数位于2n/2=n,即第n个小数;
  2. 按合并有序数组思想,进行下标迁移,当执行n-1后次后,取两数组此时下标对应的最小值极为上中位数,第n个小数;

猜你喜欢

转载自blog.csdn.net/SeaSky_Steven/article/details/114649980
今日推荐