力扣 尋找兩個有序陣列的中位數 C

2021-09-26 14:36:00 字數 1182 閱讀 5078

/*

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。

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

你可以假設 nums1 和 nums2 不會同時為空。

nums1 = [1, 3]

nums2 = [2]

則中位數是 2.0

nums1 = [1, 2]

nums2 = [3, 4]

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

*/#include using namespace std;

#define max(a,b) (((a) > (b)) ? (a) : (b))

#define min(a,b) (((a) < (b)) ? (a) : (b))

class solution

// ci 為第i個陣列的割,比如c1為2時表示第1個陣列只有2個元素。

// lmaxi為第i個陣列割後的左元素。rmini為第i個陣列割後的右元素。

int lmax1, lmax2, rmin1, rmin2, c1, c2;

int lo = 0;//加了'#',陣列1位置從0開始

int hi = 2 * n; //加了'#'所以陣列1是2*n+1長度,位置是2*n

while (lo <= hi) //二分

return (max(lmax1, lmax2) + min(rmin1, rmin2)) / 2.0;

}};//ps:兩個虛擬陣列[#2#3#5][#1#4#7#9#]合併之後的陣列a,長度為2*(m+n)*2,多餘了乙個#,忽略掉這個#,有效長度為2*(m+n)+1;

//求陣列a的中位數轉換成了求2*(m+n)+1長度陣列的中位數,也就是求第m+n+1位置的元素的值;

//c1、c2都是下標,從0開始,那麼就是c1+c2=m+n+1-1

int main()

; vectornums2 = ;

solution solution;

double ret = solution.findmediansortedarrays(nums1, nums2);

printf("ret ---- %lf", ret);

getchar();

return 0;

}

力扣 題目4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例1 nums1 1,3 nums2 2 則中位數是 2.0示例2 nums1 1,2 num...

力扣 尋找兩個正序陣列的中位數

給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1 3 nums2 2 則中位數是 2.0 示例 2 nums...

尋找兩個有序陣列的中位數

尋找兩個有序陣列的中位數 user hihone date 2019 1 31 time 16 32 description 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 ...