中央の2規則配列探しています

サイズと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

おすすめ

転載: www.cnblogs.com/wuyouwei/p/11854402.html