筆試演算法題公司真題記錄

2021-10-04 08:27:52 字數 2826 閱讀 1612

快手2020春招第一題

#整數n劃分為k份,求k個數字的最大乘積 例如 整數7分3份 最大2*2*3=12

思路:均值不等式 ab<=1/2(a^2+b^2) a和b相等時乘積最大

n,k=[int(i) for i in input().split()]

#a為每份平均數字,b為最後的餘數

a=n//k

b=n%k

sum=1

#0到i-1次因子都為a,最後一次因子為a+b

for i in range(k-1):

sum*=a

sum=sum*(a+b)

print(sum)

快手2020春招第二題給定乙個矩陣m,從左上角開始每次只能向右走或者向下走,最後達到右下角的位置,

路徑中所有數字累加起來就是路徑和,返回所有路徑的最小路徑和;

例[[1,2,3],[4,5,6],[7,8,9]] 輸出21

思路:假設是m行n列的矩陣,用dp[m][n]來抽象這個問題

dp[i][j]表示的是從原點到i,j位置的最短路徑和。我們首先計算第一行和第一列,直接累加即可。

那麼對於其他位置,要麼是從它左邊的位置達到,要麼是從上邊的位置達到,我們取左邊和上邊的較小值,然後加上當前的路徑值。

def func(a):

dp = [none]*len(a)

for i in range(len(a)):

dp[i]=[0]*len(a[0])

dp[0][0]=a[0][0]

print(dp)

for i in range(len(a)):

for j in range(len(a[0])):

if i==0:

dp[i][j]=dp[i][j-1]+a[i][j]

elif j==0:

dp[i][j]=dp[i-1][j]+a[i][j]

else:

if dp[i-1][j] > dp[i][j-1]:

dp[i][j]=dp[i][j-1]+a[i][j]

else:

dp[i][j]=dp[i-1][j]+a[i][j]

return dp[len(a)-1][len(a[0])-1]

a=[[1,2,3],[4,5,6],[7,8,9]]

print(func(a))

美團春招第二題

ac**:

n,m=[int(i) for i in input().split()]

lis=[int(i) for i in input().split()]

min = min(lis)

sum=0

i=0while m>=min:

if i==n-1:

if m>=lis[i]:

m=m-lis[n-1]

sum=sum+1

i=0else:

i=0else:

if m>=lis[i]:

m=m-lis[i]

sum+=1

i=i+1

else:

i=i+1

print(sum)

美團春招第四題

第二題:數字之積現給定任意正整數 n,請尋找並輸出最小的正整數 m(m>9),使得 m 的各位(個位、十位、百位 … …)之乘積等於n,若不存在則輸出 -1。

思路:如果n是個位數,則直接返回10+n; 如果n大於10:從9到2尋找它的因子,只要可以整除,則進行整除,並將對應因子累加到最後結果。如果最後n==1說明可以整除完整,返回結果值;否則返回-1.

ac**

sum=0

num=1

if n<10:

return 10+n

for i in range(9,1,-1):

while n%i==0:

sum+=i*num

n=n/i

num*=10

if n==1:

return sum

else:

return -1

第三題:在vivo產線上,每位職工隨著對手機加工流程認識的熟悉和經驗的增加,日產量也會不斷攀公升。假設第一天量產1臺,接下來2天(即第

二、三天)每天量產2件,接下來3天(即第

四、五、六天)每天量產3件 … … 以此類推,請程式設計計算出第n天總共可以量產的手機數量。

思路:1*1+2*2+3*3+*** +k*(n-(i-k)) 天數小於總天數時迴圈 最終留下來的幾天 每天賣k臺。

ac**:

sum=0

i=1 #第多少天

k=1 #每天賣多少臺

while i<=n:

sum+=k*k

k=k+1

i=i+k

sum+=(n-(i-k))*k #最終留下部分天數n-(i-k) 每天賣k臺 加上

return sum

阿里前端筆試演算法題。做個記錄。

我筆試的時候並沒有寫出來。有點懵,題目看了好久。開始寫的時候一開始思路也沒正確開啟。筆試完了,安靜思考了一會兒就解決了。如果不正,歡迎指出。交卷的時候截圖的,所有乙個圖層。見諒 code如下 function solve arr else if arr k i arr.length i else i...

鏈家筆試演算法題

1 給定乙個陣列,將奇數排在偶數前面 思路 類似於快排的思想 include include include using namespace std void exchange int a,int n 2 刪除有序鍊錶中的重複元素 如下 include include include using n...

首試公司面試演算法題

前幾天回家姐夫給我出了三道面試題 新手難度 題目 1.給定乙個有序數列,求value在第一次出現的位置 資料重複度比較高 第一反應就是二分查詢,然後再往前找一段。被姐夫pass掉了,要我再優化一下 題目不難,二分思想沒錯,在此基礎上我進一步二分,就行了 感覺自己演算法題白寫了,這都要想這麼久 int...