来自leetcode的两个排序数组的中位数
两个排序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。//要求算法的时间复杂度为 O(log (m+n)) 。
你可以假设 nums1 和 nums2 不同时为空。
思路:
- 合并数组
- 对数组排序
- 得到中位数
合并数组
代码片
.
// findMedianSortedArrays
public static double findMedianSortedArrays(int[] nums1, int[] nums2)
int[] a3 = new int[nums1.length + nums2.length];
System.arraycopy(nums1, 0, a3, 0, nums1.length);
System.arraycopy(nums2, 0, a3, nums1.length, nums2.length);
a3就是合并后的数组;
数组排序
代码片
.
// 这里使用嘟嘟嘟排序对a3排序
int temp = -1;
for (int i = 0; i < a3.length; i++) {
for (int j = i + 1; j < a3.length; j++) {
if (a3[i] > a3[j]) {
temp = a3[i];
a3[i] = a3[j];
a3[j] = temp;
}
}
}
得到中位数
代码片
.
// 很朴素吧
double x;
if ((a3.length) % 2 == 0) {
x = (double) (a3[a3.length / 2] + a3[a3.length / 2 - 1]) / 2;
} else {
x = a3[a3.length / 2];
}
x即中位数;
print hello world.