2つのソート配列nums1とサイズmのnums2及びnは、それぞれがあります。
2つのソート配列の中央値を検索します。全体的な実行時間の複雑さはO(ログ(M + N))であるべきです。
あなたはnums1をとることができるとnums2は両方とも空にすることはできません。
例1:
nums1 = [1,3]
nums2 = [2]
中央値は2.0である
実施例2:
nums1 = [1、2]
nums2 = [3、4]
中央値は、(2 + 3)/ 2 = 2.5であります
C ++のアイデア:トピックを達成するために必要なので、アルゴリズムの複雑さO(M + N)、我々は唯一の主要な配列の遂行を容易にすることができるようにします。私のアプローチは、ベクターを用いてシーケンスを保存するために格納されることになります。それもある大きさを決定した後?これは、偶数と二つの中間の数字のインデックスを返します。奇数は何ですか?真ん中の奇数番号を返します。良いコードよりも短く、簡潔の追求に加えて、まだ特定の読みやすさが必要です。
クラス解決{ パブリック: ダブル findMedianSortedArrays(ベクトル< INT >&nums1、ベクトル< INT >&nums2){ ベクトル < INT > マージ。 int型私は= 0、J = 0 ; 一方、(真){ 場合(I <nums1.size()&& J <nums2.size())// I、J都有效 場合(nums1 [I] <nums2 [J])merge.push_back(nums1 [I ++ ]) ; 他 merge.push_back(nums2 [J ++ ])。 もし(I> =nums1.size()) 一方、(J <nums2.size())merge.push_back(nums2 [J ++ ])。 もし(J> = nums2.size()) 一方、(I <nums1.size())merge.push_back(nums1 [I ++ ])。 もし(I> = nums1.size()&& J> = nums2.size())ブレーク。 } であれば(merge.size()%2 == 0 ) リターン(マージ[merge.size()/ 2 ] * 1.0 +マージ[merge.size()/ 2 - 1 ] * 1.0)/ 2.0 。 他の リターンマージ[merge.size()/ 2 ] * 1.0 。 } }。