LeetCode刷题之旅(4)--两个排序数组的中位数(困难题)

10分钟,一次AC并且超过了95%,还不错^.^

题目:两个排序数组的中位数

1
2
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。你可以假设 nums1 和 nums2 不同时为空。
1
2
3
4
5
6
7
8
9
示例1:
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0

示例2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5

解题思路:

方法:

这题的思路很简单,当两个数组,有一个已经填充到arr完毕的时候,另外一组直接“贴”在最后即可,然后在取arr的中位数,这题过于简单了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int sizeall=0,i=0,j=0,k=0;
sizeall=nums1.size()+nums2.size();
int arr[sizeall]={0};
while(i<nums1.size()&&j<nums2.size())
{
if(nums1[i]<nums2[j])
{
arr[k]=nums1[i];
i++;
}
else
{
arr[k]=nums2[j];
j++;
}
k++;
}
if(i<nums1.size())
{
while(i<nums1.size())
{
arr[k]=nums1[i];
i++;
k++;
}
}
if(j<nums2.size())
{
while(j<nums2.size())
{
arr[k]=nums2[j];
j++;
k++;
}
}
if((sizeall)%2==0)
{
return (arr[sizeall/2]+arr[(sizeall-1)/2])/2.0;
}
else
{
return (double)arr[sizeall/2];
}


}
};
static const auto io_sync_off = []()
{
// turn off sync
std::ios::sync_with_stdio(false);
// untie in/out streams
std::cin.tie(nullptr);
return nullptr;
}();
执行用时:28 ms

您的支持将鼓励我继续创作!