4.2つの配列の中央値を探しています。
1598 ワード
二つのサイズは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つの数の平均数です。
いくつかの解アルゴリズムの基本的なものは依然としてこの解決過程で体現されています。