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

2021-10-02 08:35:07 字數 2051 閱讀 2918

c++ 語法

參考文獻

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

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

可以假設nums1nums2不會同時為空

example: nums1 = [1, 3]

nums2 = [2]

return 中位數是 2.0

最初的版本,有bug
class solution 

else

}while(i

割演算法+二分法 割

通過切一刀,能夠把有序陣列分成左右兩個部分,切的那一刀就被稱為割cut,割cut的左右會有兩個元素,分別是左邊最大值lmax和右邊最小值rmin

割可以割在兩個數中間,也可以割在1個數上,如果割在乙個數上,那麼這個數即屬於左邊,也屬於右邊

#include #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, lo = 0, hi = 2 * n; //我們目前是虛擬加了'#'所以陣列1是2*n長度

while (lo <= hi) //二分

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

}};int main(int argc, char *ar**)

; vectornums2 = ;

solution solution;

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

return 0;

}

c++ 語法

條件運算子?

exp1 ? exp2 : exp3;
其中,exp1exp2exp3是表示式。請注意冒號的使用和位置。? : 表示式的值取決於 exp1 的計算結果。如果 exp1 為真,則計算 exp2 的值,且 exp2 的計算結果則為整個 ? : 表示式的值。如果 exp1 為假,則計算 exp3 的值,且 exp3 的計算結果則為整個 ? : 表示式的值。

常量定義

使用#define預處理器

#define identifier value

使用const關鍵字

const type variable = value;

& 引用

引用可以說把變數換了乙個名字

&b=a
引用傳入函式引數

//引用傳入函式引數

void fun(int &a, int &b)

int main()

結果:

1,2

2,1

本質上是把main()中的a,b變數 換了個名字,即:函式中的a,b,函式中的a,b位址與main()中的位址是一樣的。如果函式中的a,b值改變的,那麼main()中的a,b的值也跟著改變。

c++ prime 第5版

菜鳥教程

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

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

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

思路 將兩個陣列排序,然後判斷陣列長度,長度為單數,則取二分之一處的數,否則取二分之一處和二分之一減一處的數之和除以2.var findmediansortedarrays function nums1,nums2 var mid math.floor arr.length 2 if arr.len...

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

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