サイズとnums1 mおよびn nums2二順序付けられた配列を与え。
メジアンおよび整然とした配列の両方を検索し、アルゴリズムの時間複雑度は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であります
解決策1:
パブリック 静的 ダブル findMedianSortedArrays(INT [] nums1、INT [] nums2){ / * 配列の長さは1 * / INT M = nums1.length; / * 長さ2の配列* / int型 N- = nums2.length; / * 保持部短い長さの配列* / IF(M> N-){ 戻りfindMedianSortedArrays(nums2、nums1); } / * の最大値、右側の最小値、二番目の配列の左側の定義の後に「カット」の第1のアレイの左最大値、右側の最小値* / ダブル lMax1 = 0、Lmax2 = 0、= 0 Rmin1、Rmin2 = 0 ; / * LO右点の二分法がHi、偶数Mニーズの長さであり、二等分点の左側にあります、C1はカット点1のアレイであり、C2配列は、カット点2 * / INT LO = 0、ハイ= 2 * M、C1、C2は、 / * 継続したとき、左点未満又は点の等しい右* / ながら(LO <= こんにちは){ / * 配列の切断を取得1点* / C1 = (LO +ハイ)/ 2 ; / * カット2の配列を取得* / C2 = M + N- C1; lMax1 = C1 == 0はInteger.MIN_VALUEの:[?(C1-1)/ 2 nums1 ]; Rmin1 = C1 Integer.MAX_VALUEのM 2 * ==:nums1 [C1 / 2?]; Lmax2 = C2 == 0はInteger.MIN_VALUEの:nums2 [(C2-1)/ 2?;] Rmin2 = C2 == 2 * nは整数?。 MAX_VALUE:nums2 [C2 / 2 ]; IF(lMax1> Rmin2){ こんにちは= C1-1 。 } そう であれば(lMax2> {rMin1) LO = C1 + 1 。 } 他{ ブレーク。 } } リターン(Math.max(lMax1、lMax2)+ Math.min(rMin1、rMin2))/ 2 。 }
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/median-of-two-sorted-arrays