1、题目
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
2、输入输出示例
3、解题思路
题目可以知道,有两个有序数组分别为A 和 B,那么需要解决的步骤如下:
1、设计两个下标,A数组的初始下标 a为0;B数组的初试下标b为0;
2、比较A[a]与B[b]之间的大小,小的一方下标加一;比如A[0]>B[0],则a++;
3、情况2的依次进行,直到比较次数达到A.length+B.length的一半,则终止;
4、记录情况3中读取的两步下标对应的数值x(上一步)和y(新的),奇数个数就直接返回数值y,偶数个就返回数值x+y的一半;
4、实现代码
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int a = 0,b = 0;//下标
int x = 0,y = 0;//记录数据
for(int i = 0;i<=(nums1.length+nums2.length)/2;i++){
x = y;
//情况一,在数组num1中移动
if (a<nums1.length&&(b>=nums2.length||nums1[a]<nums2[b])){
y = nums1[a++];
}
//情况二,在num2中移动
else{
y = nums2[b++];
}
}
//判断奇数个还是偶数个
if ((nums1.length+nums2.length)%2==1){
return y;
}else{
return ((double)(x+y)/2);
}
}
}