這里會(huì)持續(xù)的發(fā)布我遇到過(guò)的算法題,歡迎在評(píng)論中一起探討這些算法的實(shí)現(xiàn)。
-
當(dāng)前已經(jīng)編程實(shí)現(xiàn)函數(shù)
int rand100()
硼端,該函數(shù)可以返回0~99的隨機(jī)整數(shù),且可以保證等概率寓搬。利用該函數(shù)實(shí)現(xiàn)int rand10000()
珍昨,要求等概率返回0~9999的隨機(jī)整數(shù)int rand10000 { return 100 * rand100() + rand100(); }
- 湯姆現(xiàn)在要在家里舉辦宴會(huì),他有很多根長(zhǎng)度并不完全相同的筷子。現(xiàn)已知每根筷子的長(zhǎng)度镣典,每個(gè)客人都能拿到兩根相同長(zhǎng)度的筷子兔毙,求宴會(huì)最多可以招待多少名賓客的函數(shù)實(shí)現(xiàn)
int getMax(int arrLength[N])
int getMax(int arrLength[N]) {
assert(arrLength != NULL && N > 0)
int count = 0;
int maxLength = arrLength[0];
for (int i = 1; i < N; i++) {
if (maxLength < arrLength[i]) { maxLength = arrLength[i]; }
}
char * counter = (char *)malloc(sizeof(char) * (mexLength + 1));
memset(counter, 0, mexLength+1)
for (int i = 0; i < N; i++) {
int idx = arrLength[i];
if (counter[idx] == 0) {
counter[idx] = 1;
} else {
count++;
counter[idx] = 0;
}
}
free(counter);
return count;
}
- 現(xiàn)有一個(gè)整數(shù)序列,你可以交換其中任意兩個(gè)數(shù)以得到一個(gè)新序列兄春,求共能得到多少種不同的序列(如果是3澎剥,3,3赶舆,3哑姚,那么無(wú)論怎么調(diào)換,都只存在一種序列)
- 現(xiàn)有一個(gè)M行N列的數(shù)組芜茵,要求按照反向斜對(duì)角線(右上角->左下角)的方式進(jìn)行打印叙量,編程實(shí)現(xiàn)int printMatrix[int arrMatrix[M][N]]
下面案例的輸出順序?yàn)椋?-1-4-2-5-8-3-6-9-7-10-11
0 | 1 | 2 | 3 |
---|---|---|---|
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
- 假設(shè)北京和上海間有一趟專列,兩個(gè)車站每小時(shí)整點(diǎn)都會(huì)朝著對(duì)方發(fā)一輛車九串。已知北京->上海的列車全程需要
13.5小時(shí)
绞佩;上海->北京的列車全程需要15.5小時(shí)
。如果某人坐在其中一輛北京->上海的列車猪钮,請(qǐng)問(wèn)途中會(huì)碰到多少輛迎面而來(lái)的列車
-
存在有序整數(shù)數(shù)組Array品山,現(xiàn)已知整數(shù)T,實(shí)現(xiàn)算法existSum(array, T)求數(shù)組中是否存在兩個(gè)元素a + b = T躬贡,如果存在谆奥,輸出a和b在數(shù)組中的位置
existSum(array: [Int], T: Int) -> (Int, Int)? { assert(array != nil) let mapper = [Int, Int]() let index = 0 for index in 0..<array.count { if let idx = mapper[T - array[index]] { return (idx, index) } mapper[array[index]] = index } return nil }
-
假設(shè)雞蛋從X層樓高度摔下來(lái)剛好會(huì)碎(X-1層不會(huì)碎),那么我們稱雞蛋的臨界點(diǎn)是X-1》鞑#現(xiàn)在有一棟100層高的樓房酸些,你有兩個(gè)雞蛋。請(qǐng)問(wèn)你如何進(jìn)行最少的試驗(yàn)得出這個(gè)雞蛋的臨界點(diǎn)檐蚜?
首先假設(shè)存在一個(gè)最大實(shí)驗(yàn)次數(shù)T魄懂,無(wú)論我們進(jìn)行怎樣的操作都不會(huì)大于這個(gè)T。最苦逼的情況下這個(gè)T等于99闯第,即我們從第二層開始一直試到第一百層市栗,這樣毫無(wú)疑問(wèn)沒(méi)有任何的技巧性。 那么我們將這99次的實(shí)驗(yàn)次數(shù)分成多份來(lái)進(jìn)行測(cè)試咳短,保證在分了之后仍然保證測(cè)試次數(shù)是最少的填帽。那么我們假設(shè)第一次雞蛋扔在第T層,如果碎了咙好,就從第一層開始一層層往上實(shí)驗(yàn)篡腌。假設(shè)第T層雞蛋沒(méi)有碎,下一次就從T+T-1層開始測(cè)試勾效,如果雞蛋碎了從T+1開始往上測(cè)試嘹悼。于是我們得到了計(jì)算公式: T + T-1 + T-2 + T-3 + T-4 + .... + 2 + 1 >= 99 最終得出的T等于14