A.サイズとnums1 mとnはnums2二規則正しいアレイを考えます。これら二つの注文の配列の中央値を検索します。このアルゴリズムは、((M + N)ログ)Oの時間複雑さを必要とします
/ * * * @param {数[]} nums1 * @param {数[]} nums2 * @return {数} * / VARの findMedianSortedArrays = 関数(nums1、nums2){ Mせ = nums1.length Nせ = nums2。長さ K1せ = Math.floor((M + N + 1)/ 2 ) k2はせ = Math.floor((M + N + 2)/ 2 ) リターン(findMedianSortedArraysCore(nums1、0、nums2、0、K1)+ findMedianSortedArraysCore(nums1、0、nums2、0、K2))/ 2 }。 / * * * * @param {数[]} nums1 * @param {数[]} nums2 * @param {数} iが * @param {数} J @param {K}番号* * @return {数値} * / constがfindMedianSortedArraysCore =(nums1、I、nums2、J、K)=> { // 配列は、配列の長さよりも大きい場合に開始位置を有する-1 // 記述が有します空の配列 // k個から別のアレイに直接採取 IF - (1 I> nums1.length {) リターン nums2 [J K + - 1 ] } IF(J> nums2.length - 。1 ){ リターン nums1 [I + K - 1 ] } // kが1である場合 、// 最小開始値に二つの配列をとることである IF(K === 1 ){ リターン Math.minを(nums1 [I]、nums2 [ J]) } // K2(K / 2とし)または長さ又は配列2の配列の最小の長さ // このステップは、(開始から終了までの長さ座標)の長さよりも、配列K2より大きい回避 せMath.floorのK2 =(K / 2 ) LETの長さ1 = nums1.length - 私は せLENGTH2 = nums2.length - J K2 = Math.min(K2、長さ1、長さ2) LET値1 = nums1 [I K2 + - 。1 ] LETの値2 = nums2 [J K2 + - 。1 ] // 2つの配列の開始座標の比較値 // 値1の場合値2未満 // iはフロントnums1のK2の部分を+廃棄する // そうでない場合nums2のJ + K2の前部を拒否 IF(VALUE1 < 値2){ 戻りfindMedianSortedArraysCore(nums1、私はK2、nums2、J、K + - K2) }他{ 戻り findMedianSortedArraysCore(nums1、I、nums2、J + K2を、K - K2) } }
II。「人間の波」にする方法、文字列を書きます
「こんにちは」の文字列を入力します。
文字列を出力:[「こんにちは」、「こんにちは」、「こんにちは」、「こんにちは」、「こんにちは」]