網易2021秋招演算法筆試排隊問題(python)

2021-10-08 23:03:55 字數 1881 閱讀 1177

題目:

現在有n個人排隊買票,已知早上8點開始賣,每個人有兩種買法,單獨買第i個人花費a[i]秒;和後面乙個人一起買,第i和第i+1個人一共花費b[i]秒。求最早什麼時候可以結束排隊

輸入2#樣例組數

2#排隊人數

20 25#a[i]

40#b[i]

1#排隊人數

8#a[i]

輸出08:00:40 am

08:00:08 am

思路:用動態規劃求解,dp[i]是第i個人完成排隊的最小時間。每個人有兩種選擇,第一種自己買,第二種和前面乙個人一起買,因為是前i個人,所以不能和後面那個人一起買。dp[i]=min(dp[i-1]+a[i],dp[i-2]+b[i-1])。因為受前兩個的影響,初始化dp[1]=a[1](第乙個人只能自己買),dp[2] = min(dp[1]+a[2],dp[0]+b[1]),所以dp[0]也需要初始化,沒人的時候不用排隊所以為0,後面的都可以通過狀態轉移獲得。

**如下:(部分細節在**標註中)

n =

int(

input()

)for i in

range

(n):

num =

int(

input()

)if num ==0:

#沒人的話,排隊直接結束

print

('08:00:00 am'

)elif num ==1:

#只有乙個人的時候沒有b[i]

a =int(

input()

)else

: list1 =

list

(map

(int

,input()

.split())

) list2 =

list

(map

(int

,input()

.split())

) dp =[0

for _ in

range

(num+1)

] dp[1]

= list1[0]

for i2 in

range(2

,num+1)

: dp[i2]

=min

(dp[i2-1]

+list1[i2-1]

,dp[i2-2]

+list2[i2-2]

) a = dp[num]

#最終需要排隊的總用時

x = a//

3600

#處理成時間表示

y = a%

3600

//60

z = a%

3600%60

if(x+8)

>12:

print

(str

(x-4

).rjust(2,

'0')

+':'

+str

(y).rjust(2,

'0')

+':'

+str

(z).rjust(2,

'0')

,'pm'

)else

:print

(str

(x+8

).rjust(2,

'0')

+':'

+str

(y).rjust(2,

'0')

+':'

+str

(z).rjust(2,

'0')

,'am'

)#rjust(2,'0')是將8變成08,物件是str

2021秋招網易筆試

給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 把要處理的字元分成回文串和非回文串,再將非回文串逆置加到頭部。要注意,已經移動出最長回...

2021網易秋招筆試題(Android開發)

校招的筆試題通常是4道程式設計題,時間為2個小時,每題25分。2021秋招筆試題總結如下,包含問題和 實現。解析 這個很簡單,用python的話只需要用dict統計出每個單詞的個數然後計算出頻率大於1 的單詞,儲存輸出。用dict統計數字 如下 d key d.get key,0 1 d是字典型別的...

2021秋招部分筆試題

2021秋招部分筆試題彙總 企業提供原題 00 00 28 4 6 程式設計題 查詢二叉搜尋樹的葉子節點 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 給乙個二叉查詢樹 binary search tree 的前序遍歷結果陣列,列印出所有的葉子節點。輸入描述 輸入為...