快手筆試題一共四道算法題,時間為兩個小時履植,第三道和第四道需要長期積累计雌,筆者兩個小時只擼出來兩道題,尤其是第四道題需要高等數(shù)學玫霎、微積分等等知識:
快手算法筆試A卷第一道編程題:
給定正整數(shù)N凿滤,將其分成K份,保證每一份都是正整數(shù)庶近,求這些正整數(shù)乘積的最大值翁脆。
比如:給定(),可以得到結果:
python實現(xiàn)(耗時一個小時10分鐘):
import math
def KN_1(K, N, result):
if K==1 or N==1:
return result*N
min_result = math.ceil(N/K)
N = N - min_result
K = K - 1
result = result * min_result
return KN_1(K, N, result)
if __name__ == '__main__':
result = KN_1(3, 7, 1)
print(result)
快手算法筆試A卷第二道編程題:
給定一個N*M的矩陣鼻种,從(0,0)出發(fā)到(N-1反番,N-1),每一次只能向下或者向右叉钥,求最優(yōu)(最短)路徑罢缸。
比如:給定(),可以得到結果:
python實現(xiàn)(耗時30分鐘):
def minPathSum(grid):
m, n = len(grid), len(grid[0])
dp = []
for i in range(m):
dp.append([0 for _ in range(n)])
for i in range(m):
for j in range(n):
if i == 0:
dp[i][j] = dp[i][j-1] + grid[i][j]
else:
if j == 0:
dp[i][j] = dp[i-1][j] + grid[i][j]
else:
dp[i][j] = min(dp[i-1][j], dp[i][j-1])+grid[i][j]
return dp[m-1][n-1]
if __name__ == '__main__':
result = minPathSum([[1,2,3],[4,5,6],[7,8,9]])
print(result)