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

2021-10-04 13:31:56 字數 1366 閱讀 7164

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

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

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

1.暴力法,利用另乙個陣列合併,求中位數

public

double

findmediansortedarrays

(int

nums1,

int[

] nums2)

if(n ==0)

int i =

0, j =

0, index =0;

while

(i < m && j < n)

while

(i < m) sum[index++

]= nums1[i++];

while

(j < n) sum[index++

]= nums2[j++];

if((n +m)%2

==1)return sum[

(m +n)/2

];else

return

(sum[

(m+n)/2

]+ sum[

(m +n)/2

-1])

*0.5

;}

2.這裡比較節省記憶體,利用left,right,其中left用來儲存right上次的值,這樣當迴圈len / 2 + 1次時,正好記錄下了左右值

public

double

findmediansortedarrays

(int

nums1,

int[

] nums2)

else}if

((m + n)%2

==1)return right;

else

return

(left + right)

*0.5

;}

3.利用第k小的框架(以後再學吧、、、)

public

double

findmediansortedarrays

(int

n1,

int[

] n2)

public

double

find

(int

n1,

int s1,

int e1,

int[

]n2,

int s2,

int e2,

int k)

else

}

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

思路 我現在還沒有進行優化,大概就是合併陣列 參照之前的順序表合併 然後如果合併陣列的大小sum是偶數,返回sum 2和sum 2 1兩個元素除以二,如果sum是奇數則直接返回sum 2的元素 double findmediansortedarrays int nums1,int nums1size...

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

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

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

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