1.题目描述
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
提示:
- nums1.length == m
- nums2.length == n
- 0 <= m <= 1000
- 0 <= n <= 1000
- 1 <= m + n <= 2000
- -106 <= nums1[i], nums2[i] <= 106
Tips: 力扣地址:leetcode-cn.com/problems/me…
2. 思路分析
中位数-是按顺序排列的一组数据中居于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。首先中位数是一组排序好的数据中的数组。所以本题主要考察的是排序。
- 将数组进行合并成一个
- 对合并后的数组进行排序
- 找出中位数
但是对于Java来说这些都可以利用Java提供的方法来实现。
3. AC代码
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int nums1Size = nums1 == null?0:nums1.length;
int nums2Size = nums2 == null?0:nums2.length;
int[] totalNum = new int[nums1Size+nums2Size];
int start= 0;
if(nums1 != null){
System.arraycopy(nums1, 0, totalNum, start, nums1Size);
start += nums1Size;
}
if(nums2 != null){
System.arraycopy(nums2, 0, totalNum, start, nums2Size);
}
Arrays.sort(totalNum);
return totalNum.length % 2 == 0?((double) (totalNum[totalNum.length/2-1]+totalNum[totalNum.length/2]))/2:totalNum[totalNum.length/2];
}
}
运行结果:
4. 总结
这个题目主要考察的是对排序算法的了解,不同排序算法的时间复杂度。Arrays.sort使用的快排实现
我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢