n個數進出棧的順序有多少種?假設棧的容量無限大。
解法和上乙個案例相同:
進棧相當於左括號,出棧相當於右括號,所以答案還是卡特蘭數:
[1/(n+1)] * c(2n, n)
n就是題幹中的n個數
2n個人排隊買票,n個人手拿5塊錢,n個人手拿10塊錢,票價是5塊錢一張,每人買一張票,售票員受理沒有零錢。問有多少種排隊方法可以讓售票員順利賣票。
還是卡特蘭數的應用,5塊錢相當於左括號,10塊錢相當於右括號,答案還是卡特蘭數:
[1/(n+1)] * c(2n, n)
n就是題幹中的n個人
假設n個無差別的節點構成的結構數為f(n)
f(0)
表示空樹,所以規定種數為1種
進行下面的分析:
①以1節點作為頭部:結構數1*f(n-1)
②以2節點作為頭部:結構數1*f(n-2)
③以3節點作為頭部:結構數f(2)*f(n-3)
④以4節點作為頭部:結構數f(3)*f(n-4)
……o
o o…o o o (n個節點)
oo
o…o o o (n個節點)
o oo
o…o o (n個節點)
o o oo
o…o (n個節點)
……總結如下:
初始值滿足f(0) = f(1) = 1, f(2) = 2, f(3) = 5
下列結構
f(n) = f(0)*f(n-1) + f(1)*f(n-2) + f(2)*f(n-3) + f(3)*f(n-4) + …… + f(n-1)*f(n)
= [1/(n+1)] * c(2n, n)
——上式為卡特蘭數的重要公式2
有12個高矮不同的人,排成兩排,要求:每排必須是從矮到高排列,而且第二排對應比第一排的人高,問排列方式有多少種?
此題又是乙個卡特蘭數問題,只是隱藏的很深。 我們假設:
0:排在第一排
1:排在第二排
則12個人從低到高排列後,可以用0和1表示,示例如下
如果字首(前n個數)出現1比0多的情況,這種排列必然是不合法的。
這時,問題變為任意字首不能出現1比0多的情況,問題又等價於n組括號合法的問題,答案還是[1/(n+1)] * c(2n, n)
,這裡的n是12/2 = 6
.
直通BAT演算法面試 排列組合 概率
題一 已經有乙個能夠利用概率p產生0 1 p 概率產生1的隨機函式f,請你用f函式設計乙個函式m使得m能夠等概論產生0 1 思路 連續呼叫兩次f,會產生四種情況,只要你規定其中兩種情況返回1另外兩種情況返回0就行。題二 已經有乙個能夠能夠隨機產生1 5的隨機函式f,利用f設計乙個能夠隨機產生1 7的...
直通BAT面試演算法精講 排序(1)
注 所有的 都是用python實現的,都是自己寫的,可能有些地方不太完善 時間複雜度 o n 2 空間複雜度 o 1 思想 依次訪問元素,逆序就置換。一趟排序後最大 小 的被置換到最後 def bubble sort arr,n ifnot arr return none for i in rang...
直通BAT面試演算法精講 排序(4)
荷蘭國旗問題 三色排序問題 對只包含0,1,2的整數陣列進行排序,要求使用交換 原地排序,而不是利用計數進行排序,做到0全在陣列左邊,1在中間,2在右邊 本題主要過程和快排劃分過程類似 測試用例 arr 1,1,0,0,2,1,1,0 輸出 0,0,0,1,1,1,1,2 解題思路 在陣列左側設定乙...