給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2示例 1:請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。
你可以假設 nums1 和 nums2 不會同時為空。
你可以假設 nums1 和 nums2 不會同時為空。
nums1 = [1, 3]示例 2:nums2 = [2]
則中位數是 2.0
nums1 = [1, 2]nums2 = [3, 4]
則中位數是 (2 + 3)/2 = 2.5
#include
#include
#include
#include
using
namespace std;
class
solution
;void
findmediansortedarrays()
for(
auto
&elem : myvec2)
multiset<
int> c1;
for(
auto
&elem : myvec1)
for(
auto
&elem : myvec2)
for(
auto
&elem : c1)
auto it = c1.
begin()
;int count = c1.
size()
;double middle =0;
if(count %2==
0)middle +
=*it;
it = c1.
begin()
;for
(int i =
0; i < count;
++i)
middle +
=*it;
middle /=2
;}else
middle =
*it;
}
cout <<
"middle: "
<< middle << endl;}}
;void
myinput
(vector<
int>
& vec)
}int
main()
官方解法
#include
#include
#include
#include
using
namespace std;
class
solution
;float
findmediansortedarrays()
m = myvec1.
size()
; n = myvec2.
size()
; cout <<
"m: "
<< m <<
" n: "
<< n << endl;
int imin =
0, imax = m, halflen =
(m + n +1)
/2;while
(imin <= imax)
else
if(i > imin && myvec1.
at(i -1)
> myvec2.
at(j)
)else
else
if( j ==0)
elseif(
(m + n)%2
==1)float minright =0;
if( i == m)
else
if( j == n )
else
return
(maxleft + minright)
/2.0;}
}return
0.0;}}
;void
myinput
(multiset<
int>
& mulset)
;int
main()
for(
auto
& elem : mulset2)
solution sl1
(vec1,vec2)
;float median =
0;
median = sl1.
findmediansortedarrays()
;
cout <<
"median: "
<< median << endl;
}void
myinput
(multiset<
int>
& mulset)
cin.
clear()
;
cin.
ignore()
;}
尋找兩個有序陣列的中位數
尋找兩個有序陣列的中位數 user hihone date 2019 1 31 time 16 32 description 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 ...
尋找兩個有序陣列的中位數
思路 將兩個陣列排序,然後判斷陣列長度,長度為單數,則取二分之一處的數,否則取二分之一處和二分之一減一處的數之和除以2.var findmediansortedarrays function nums1,nums2 var mid math.floor arr.length 2 if arr.len...
尋找兩個有序陣列的中位數
給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 n...