LeetCode 4 兩個排序陣列的中位數

2021-08-20 04:17:10 字數 1266 閱讀 1915

給定兩個大小為 m 和 n 的有序陣列nums1nums2

請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 o(log (m+n)) 。

nums1 = [1, 3]

nums2 = [2]

中位數是 2.0

nums1 = [1, 2]

nums2 = [3, 4]

中位數是 (2 + 3)/2 = 2.5

本來可以歸併排序,直接求中位數,但是由於有時間複雜度要求,所以採用快排的思想找中位數。

快速排序的思想是分治,將乙個陣列分成兩塊之後再進行排序,也就是說,如果採用分治,由於中位數的下標是固定的,當劃分點的下標 < 中位數下標,此時就去劃分點右邊去找,反之就去左邊,和二分查詢的方式很像,這種查詢方式的時間複雜度正好為log(m + n)。

我們要做的就是先把陣列合併,然後用快排的思想進行分割槽,直至分割槽下標 = 中位數下標,此方法也可以找無序陣列的中位數。

int quickmove(int* arr, int left, int right);//快排思想找中位數

void swap(int* x1, int * x2);//交換函式

double findmediansortedarrays(int* nums1, int nums1size, int* nums2, int nums2size)

else

}ret = (double)num[div];

if (size % 2 == 0)

else

}ret += (double)num[div];

free(num);//釋放掉申請的空間,不能忘

return ret / 2;

}free(num);

return ret;

}int quickmove(int* arr, int left, int right)

}fast++;

}slow++;

swap(arr + slow, arr + right);

return slow;

}void swap(int* x1, int * x2)

*x1 ^= *x2;

*x2 ^= *x1;

*x1 ^= *x2;

}

leetcode 4 兩個排序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2 請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 o log m n 示例 1 nums1 1,3 nums2 2 中位數是 2.0 示例 2 nums1 1,2 nums2 3,4 中位數是 2 3 2 2.5 思路 兩個陣...

LeetCode4 兩個排序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2 請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 o log m n 示例 1 nums1 1,3 nums2 2 中位數是 2.0示例 2 nums1 1,2 nums2 3,4 中位數是 2 3 2 2.5 兩個有序陣列,...

LeetCode 4 兩個排序陣列的中位數

題目描述 給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2均不為空。困難題,要求演算法時間複雜度為o log m n 也就是最優方法 參考解法 二分法查詢,每次捨棄部分區間 pu...