直通BAT面試演算法精講課 動態規劃

2022-02-03 13:19:21 字數 1615 閱讀 1355

1.有陣列penny,penny中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim(小於等於1000)代表要找的錢數,求換錢有多少種方法。

給定陣列penny及它的大小(小於等於50),同時給定乙個整數aim,請返回有多少種方法可以湊成aim。

測試樣例:

[1,2,4],3,3
返回:2
penny[i]代表貨幣的面值。

f[n],n代表可以組成的面值。f[n]代表可以組成的方法。

f[0] 代表組成0,只有一種方法,就是不選任何貨幣,就可以組成0;

f[j] 代表組成j,有幾種方法,等於使用n-1個penny[i]的值的方法。迴圈累加到aim,最後就得到了組成aim的方法。

例如:

penny[i]=5,那麼組成的數,是f[5],f[10],f[15] ,能被5整除的,都為前乙個加上當前的值。

當所有面值的貨幣,都迴圈完成,就得到了所求值。

class

exchange

};

2.有n級台階,乙個人每次上一級或者兩級,問有多少種走完n級台階的方法。為了防止溢位,請將結果mod 1000000007

給定乙個正整數intn,請返回乙個數,代表上樓的方式數。保證n小於等於100000。

#define mod 1000000007

class

goupstairs

};這個題可以是使用2個變數,迴圈交替的增加就可以了。就會占用連續記憶體了。

3.有乙個矩陣map,它每個格仔有乙個權值。從左上角的格仔開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和。

給定乙個矩陣map及它的行數n和列數m,請返回最小路徑和。保證行列數均小於等於100.

測試樣例:

[[1,2,3],[1,1,1]],2,3
返回:4
class

minimumpath

for(int i=1;i)

for(int i=1;i)

}return dp[n-1][m-1

]; }

};

4.這是乙個經典的lis(即最長上公升子串行)問題,請設計乙個盡量優的解法求出序列的最長上公升子串行的長度。

給定乙個序列a及它的長度n(長度小於等於500),請返回lis的長度。

測試樣例:

[1,4,2,5,3],5
返回:3

int getnum(vectora)}}

int ans = 0;

for(int i = 0; i < n; i++)

return ans;

}

直通BAT面試演算法精講課2

對於乙個int陣列,請編寫乙個氣泡排序演算法,對陣列元素排序。給定乙個int陣列a及陣列的大小n,請返回排序後的陣列。測試樣例 1,2,3,5,2,3 6 1,2,2,3,3,5 冒泡 依次比較相鄰,大的放後面。class bubblesort return a class bubblesort r...

直通BAT面試演算法精講課1

1.有一棵二叉樹,請設計乙個演算法,按照層次列印這棵二叉樹。給定二叉樹的根結點root,請返回列印結果,結果按照每一層乙個陣列進行儲存,所有陣列的順序按照層數從上往下,且每一層的陣列內元素按照從左往右排列。保證結點數小於等於500。struct treenode class treeprinter ...

直通BAT面試演算法精講 排序(1)

注 所有的 都是用python實現的,都是自己寫的,可能有些地方不太完善 時間複雜度 o n 2 空間複雜度 o 1 思想 依次訪問元素,逆序就置換。一趟排序後最大 小 的被置換到最後 def bubble sort arr,n ifnot arr return none for i in rang...