4.2つの配列の中央値を探しています。

1598 ワード

  • テーマリンク:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
  • コードアドレス:https://github.com/xvusrmqj/CodeProblems/tree/master/src/main/java/leetcode_cn
  • タイトル:
    二つのサイズはmとnの秩序配列nums 1とnums 2を与えます。この二つの秩序配列の中央値を探し出してください。アルゴリズムの時間複雑度はO(log(m+n))です。nums 1とnums 2は同時に空ではないと仮定できます。
    例1:nums 1=[1,3]nums 2=[2]は中央値が2.0である。
    例2:nums 1=[1,2]nums 2=[3,4]では中央値は(2+3)/2=2.5
    解法:
        public double findMedianSortedArrays(int[] nums1, int[] nums2) {
            int[] all = new int[nums1.length + nums2.length];
            int i = 0, j = 0, k = 0;
            while (i < nums1.length && j < nums2.length) {
                if (nums1[i] < nums2[j]) {
                    all[k++] = nums1[i++];
                } else {
                    all[k++] = nums2[j++];
                }
            }
            while (i < nums1.length) {
                all[k++] = nums1[i++];
            }
            while (j < nums2.length) {
                all[k++] = nums2[j++];
            }
            if (all.length % 2 == 1) {
                return (double) all[all.length / 2];
            } else {
                return (all[all.length / 2 - 1] + all[all.length / 2]) / 2.0;
            }
        }
    
    まとめ:
    この問題は脅し的で、書いてあるのは難しいし、また「中央値」などです。実は自分で一回提出すれば成功します。中間桁数の概念:一組の並べ替えの数の中で、もし個数が奇数ならば、中央の桁は中間のその数で、偶数ならば、中間の2つの数の平均数です。
    いくつかの解アルゴリズムの基本的なものは依然としてこの解決過程で体現されています。
  • 考えが分かりましたら、まず考えを書きます。具体的にあまり細く書かないでください。はまりやすいです。例えばこの問題はまず大体一つ書きます。一番目のwhileは一番大きいです。二つ目のwhileは比較的大きくないです。最後のif elseは中位概念の表現です。
  • 構想を書き終わったら、具体的に各ステップの細部を補完します。
  • 最後にまとめて、境界値を見て、最後の修正を行います。
  • に提出してください。問題があれば、このセットで出力してください。