題目:
給定兩個大小為 m 和 n 的正序(從小到大)數組?nums1 和?nums2。
請你找出這兩個正序數組的中位數,并且要求算法的時間復雜度為?O(log(m + n))。
你可以假設?nums1?和?nums2?不會同時為空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
則中位數是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
則中位數是 (2 + 3)/2 = 2.5
思路:
將數組元素合并到list,對list排序取中間元素
方法:
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
double result;
? ? // 將兩個數組元素裝進list
? ? List list =new ArrayList<>();
? ? for (int i : nums1) {
list.add(i);
? ? }
for (int i : nums2) {
list.add(i);
? ? }
// 對list元素排序
? ? List collect = list.stream().sorted().collect(Collectors.toList());
? ? // 判斷list元素個數是奇數還是偶數,奇數直接取中間元素,偶數取中間兩元素取平均值
? ? int size = collect.size();
? ? if (size %2 ==0) {
int a = collect.get(size /2 -1);
? ? ? ? int b = collect.get(size /2);
? ? ? ? result = (a + b) /2.0;
? ? }else {
int index = (size +1) /2 -1;
? ? ? ? result = collect.get(index);
? ? }
return result;
}