4. 寻找两个正序数组的中位数
程序员文章站
2022-07-14 14:34:58
...
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
思路:已知数组的长度 使用双指针O(m+n)
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
// 两数组总长
int len = nums1.length+nums2.length;
//中间值的索引
int midindex = len/2;
//定义两个变量进行迭代,总长为奇数,中位数为mid2,总长为偶数,中位数为mid1和mid2的平均值
int mid1 = 0, mid2 = 0;
// 定义两个指针分别作为两个数据的索引
int i1 = 0, i2 = 0;
while(true){
if(i1+i2 == midindex + 1) break;
//依次迭代
mid1 = mid2;
// 当某个指针已经到达边界,只迭代另一个指针
if(i1 == nums1.length){mid2 = nums2[i2++];continue;}
if(i2 == nums2.length){mid2 = nums1[i1++];continue;}
//两个指针都到达边界,比价大小按顺序取值
mid2 = nums1[i1] < nums2[i2] ? nums1[i1++]:nums2[i2++];
}
return len % 2 == 0? (mid1+mid2)/2.0 : mid2;
}
}
划分数组
中位数的定义:将一个集合划分为两个长度相等的子集,其中一个子集中的元素总是大于另一个子集中的元素。
上一篇: c语言和Java语言实现,两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
下一篇: Hive如何删除、添加、修改表中的字段
推荐阅读