快手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...