c++ 語法
參考文獻
給定兩個大小為 m 和 n 的有序陣列nums1
和nums2
。
請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))
可以假設nums1
和nums2
不會同時為空
example: nums1 = [1, 3]
nums2 = [2]
return 中位數是 2.0
最初的版本,有bugc++ 語法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;
}
條件運算子?
exp1 ? exp2 : exp3;
其中,exp1
、exp2
和exp3
是表示式。請注意冒號的使用和位置。? : 表示式的值取決於 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...