本文介绍: 根据元素个数决定,如果个数为奇数,中间那个就是中位数,如果为偶数,则中间的和前一个元素的平均数就是中位数。合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。最基本的思路,将两个数组重新排序到一个新的数组里,之后再求这个数组的中位数。合并数组 = [1,2,3] ,中位数 2。请你找出并返回这两个正序数组的。的正序(从小到大)数组。算法的时间复杂度应该为。
题目描述
给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
示例 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
思路分析
最基本的思路,将两个数组重新排序到一个新的数组里,之后再求这个数组的中位数。
关于中位数的求法:
根据元素个数决定,如果个数为奇数,中间那个就是中位数,如果为偶数,则中间的和前一个元素的平均数就是中位数。
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int j=0;
int i=0;
int q=0;
int k=0;
int arr[nums1Size+nums2Size];
while(i<nums1Size||j<nums2Size)
{
if(i==nums1Size)
{
q=nums2[j++];//将要存放到新数组里的值先放到q里。
}
else if(j==nums2Size)
{
q=nums1[i++];
}
else if(nums1[i]<nums2[j])
{
q=nums1[i++];
}
else
{
q=nums2[j++];
}
arr[k++]=q;
}
int a=nums1Size+nums2Size;
double n=0;
if(a==1)
{
return arr[a-1];
}
else
{
if(a%2==0)
{
int b=a/2;
n=(arr[b-1]+arr[b])/2.0;//整除2.0转换为double型
}
else
{
int b=a/2;
n=arr[b]*1.0;
}
}
return n;
}
原文地址:https://blog.csdn.net/wcl312/article/details/134625114
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_3595.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。