题目:
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
思路:
因为两数组都是正序的,利用这一点就可以合并成一个正序数组,最后即可求取中位数。
class Solution {
public double findMedianSortedArrays(int[] num1, int[] num2) {
ArrayList<Integer> arr = new ArrayList<>();
int length1 = num1.length;
int length2 = num2.length;
int i =0;
int j=0;
while (i<length1||j<length2)
{
if (i==length1){
arr.add(num2[j++]);
}
else if (j==length2){
arr.add(num1[i++]);
}
else if (num1[i]<=num2[j])
arr.add(num1[i++]);
else arr.add(num2[j++]);
}
int mid = arr.size()/2;
if (arr.size()%2==1)
return arr.get(mid);
else return (double)(arr.get(mid)+arr.get(mid-1))/2;
}
}