寻找两个有序数组的中位数
- 题目描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。
通过循环
- 题目分析:该题可以通过循环比较将两个有序数组合并,然后便能找出中位数。
- 代码展示:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
int i;
int p=0;
int q=0;
double[] nums = new double[m+n];
for(i=0;i<m+n;i++){
if((p+1<=m)&&(q+1<=n)){
if(nums1[p]<nums2[q]) {nums[i]=nums1[p];p++;}
else {nums[i]=nums2[q];q++;}
}
else if(p+1<=m) {nums[i]=nums1[p];p++;}
else if(q+1<=n) {nums[i]=nums2[q];q++;}
}
if((m+n)%2==0) {return (nums[(m+n)/2-1]+nums[(m+n)/2])/2;}
else {return nums[(m+n-1)/2];}
}
}
- 运行评价:该题逻辑较为简单,但是并未达到题目对于时间复杂度要求,之后我会对该题代码进行优化。