2019位元組跳動演算法崗春招(不是2020屆的秋招!),共四道程式設計題,沒有選擇題。筆試的時候只做出來了前兩道,這裡參考了大佬 azhao1993 的解題思路, 把後兩道的解法整理一下。
現在有n人參加程式設計比賽,比賽結束後每個人都得到乙個分數。現在所有人鋪成一圈(第1個和第n個相鄰)領取獎品,要求:
1.如果某個人的分數比左右的人高,那麼獎品數量也要比左右的人多;
2.每個人至少得到乙個獎品。
輸入描述:
第一行是整數n,表示測試樣例數
每個測試樣例的第一行是乙個正整數,表示參加比賽的人數(0示例1
輸入
2輸出21 2
41 2 3 3
3思路: 將選手從左到右排列在乙個列表中,首尾相連,然後從左到右和從右到左分別使用貪心演算法。8
解答(python3):
# 讀入輸出
import sys
try:
while
true
: line = sys.stdin.readline(
).strip(
)if line =='':
break
except
:pass
defmain()
: n =
int(lines[0]
)# 測試樣例數
for i in
range
(n):
m =int(lines[i*n+1]
)#選手數目
s =[int
(item)
for item in lines[i*n+2]
.split(
' ')
]# 選手的分數
assert m ==
len(s)
,print
("error!"
) r =[1
for _ in
range
(m)]
# 選手的獎品數,初始值為每個選手1個獎品
# 首尾相連
m +=10
])1)
while
true
: flag =
false
#判斷當前迴圈內有沒有發生獎品數的變化,若沒有則說明當前獎品數已滿足要求,可以退出當前迴圈。
#從左到右,若右邊選手的分數高於左邊,但獎品數低於或等於左邊,則右邊選手的獎品數=左邊選手的獎品數+1
for j in
range
(m-1):
if s[j]
< s[j+1]
and r[j]
>= r[j+1]
: r[j+1]
= r[j]+1
flag =
true
r[0]
= r[-1
]#從右到左,若左邊選手的分數高於右邊,但獎品數低於或等於右邊,則左邊選手的獎品數=右邊選手的獎品數+1
for j in
range
(m-1,1
,-1)
:if s[j]
< s[j-1]
and r[j]
>= r[j-1]
: r[j-1]
= r[j]+1
flag =
true
r[-1
]= r[0]
ifnot flag:
break
result =
sum(r[0:
len(s)-1
])#輸出結果
print
(result)
if __name__ ==
'__main__'
: main(
)
有n根繩子,第i根子長度為li,現在需要m根等長的繩子,你可以對n根繩子進行任意裁剪(不能拼接),請你幫忙計算出這m根繩子最長的長度是多少。
輸入描述:
第一行包含2個正整數n,m, 表示n根原始的繩子和最終需要m根繩子數思路:二分法第二行包含n個整數,第i個整數li表示第i根繩子的長度
其中1<=n, m<=10000
0輸出描述:
對每乙個測試用例,輸出乙個數字,表示裁剪最後的長度,保留兩位小數
解答(python3):
# 讀入輸出
import sys
try:
while
true
: line = sys.stdin.readline(
).strip(
)if line =='':
break
except
:pass
n = lines[0]
.split(
' ')[0
]m = lines[0]
.split(
' ')[1
]l =
[int
(item)
for item in lines[1]
.split(
' ')
]def
main()
: length =
sum(l)
#總繩長
l =0 r = length
result =
0while
(r-l)
>1e-
4:#二分法,當l-r滿足精度時跳出迴圈
mid =
(l+r)
/2.0
if mid ==0:
break
ifsum([
int(item/mid)
for item in l]
)>= m:
#如果可以截成m段長度為mid的繩子
l = mid
result = mid
else
: r = mid
print
(round
(mid,2)
)if __name__ ==
'__main__'
: main(
)
2019位元組跳動秋招筆試
題目描述 小明目前在做乙份畢業旅行的規劃。打算從北京出發,分別去若干個城市,然後再回到北京,每個城市之間均乘坐高鐵,且每個城市只去一次。由於經費有限,希望能夠通過合理的路線安排盡可能的省一些路上的花銷。給定一組城市和每對城市之間的火車票的價錢,找到每個城市只訪問一次並返回起點的最小車費花銷。輸入描述...
2019位元組跳動實習面試
位元組跳動還是依舊非常注重演算法能力,所以面試過程演算法比重依舊比較大,不知道是不是年前比較缺人的原因,這次面試一共經歷了兩面,而且難度比我去年面試抖音略簡單一下,下面是面試過程的主要題目。1.開始仍舊是常規的自我介紹,接下來重點詢問我在美團實習的經歷,待我將實習內容講解完成以後,主要問我分庫分表按...
2019春招筆試涼經 位元組跳動20190316
1.求找錢最少給幾個硬幣 有1024元錢 輸入你花掉的數目問找回的硬幣數最小 有64 16 4 1 的硬幣 res 1024 n cnt 0 while res 64 res 64 cnt 1 while res 16 res 16 cnt 1 while res 4 res 4 cnt 1 whi...