我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/description/
题目描述:
知识点:二分查找,分治算法
思路一:设两个指针依次从小到大遍历两个有序数组,得到中位数
这是我的第一个想法,求中位数不就是求中间那个数吗?而给我们的又是两个有序数组,我们完全可以设两个指针分别遍历两个数组,将其值存入另一个数组中。
这里需要注意的是中位数的下标值问题,我们假设nums1数组的长度为n1,nums2数组的长度为n2,假设将nums1数组和nums2数组合并成一个数组,那么该数组的长度为n1 + n2,我们要求的中位数就是该新数组中的中位数。
如果n1 + n2是一个偶数,那么我们要求的中位数是两个数的平均值,这两个数的下标为(n1 + n2) / 2和(n1 + n2) / 2 - 1。
如果n1 + n2是一个奇数,那么我们要求的中位数就是一个数,该数的下标为(n1 + n2) / 2。
因此我们设合并数组的长度的时候完全没必要将其设为n1 + n2,只需设为(n1 + n2) / 2 + 1即可。
对于这样的解法,时间复杂度是O(m + n)级别的,其中m表示nums1数组的长度,n表示nums2数组的长度,显然不满足题目要求的O(log(m + n))的时间复杂度的要求。但我们还是可以把这个解法当作一个思路,而且这个解法在LeetCode中是能够得到通过的。
JAVA代码:
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n1 = nums1.length;
int n2 = nums2