前往
大廳
主題

LeetCode - 1894. Find the Student that Will Replace the Chalk 解題心得

Not In My Back Yard | 2021-09-24 00:00:07 | 巴幣 0 | 人氣 130

題目連結:


題目意譯:
現在有 n 位學生編號 0 到 n - 1 在教室裡。教師將會給每位同學一道問題,從學號 0 開始,接著是學號 1 ,以此類推直到教師到達了學號 n - 1。之後,教師將會重新開始此過程,再次從學號 0 開始。

你被給定一個索引值從 0 開始之整數陣列 chalk 以及一整數 k。一開始有 k 根粉筆。當學號 i 被給定一道問題去解時,他將會使用掉 chalk[i] 根粉筆去解該問題。但是當目前粉筆數嚴格小於 chalk[i] 時,則學號 i 將會被要求更換粉筆。

回傳將會替換粉筆的學生之索引值。

限制:
chalk.length == n
1 ≦ n ≦ 10 ^ 5
1 ≦ chalk[i] ≦ 10 ^ 5
1 ≦ k ≦ 10 ^ 9



範例測資:
範例 1:
輸入: chalk = [5,1,5], k = 22
輸出: 0
解釋: 學生輪流如下:
- 學號 0 用掉 5 根粉筆,所以 k = 17。
- 學號 1 用掉 1 根粉筆,所以 k = 16。
- 學號 2 用掉 5 根粉筆,所以 k = 11。
- 學號 0 用掉 5 根粉筆,所以 k = 6。
- 學號 1 用掉 1 根粉筆,所以 k = 5。
- 學號 2 用掉 5 根粉筆,所以 k = 0。
學號 0 沒有足夠的粉筆,所以他將會去替換粉筆。

範例 2:
輸入: chalk = [3,4,1,2], k = 25
輸出: 1
解釋: 學生輪流如下:
- 學號 0 用掉 3 根粉筆,所以 k = 22。
- 學號 1 用掉 4 根粉筆,所以 k = 18。
- 學號 2 用掉 1 根粉筆,所以 k = 17。
- 學號 3 用掉 2 根粉筆,所以 k = 15。
- 學號 0 用掉 3 根粉筆,所以 k = 12。
- 學號 1 用掉 4 根粉筆,所以 k = 8。
- 學號 2 用掉 1 根粉筆,所以 k = 7。
- 學號 3 用掉 2 根粉筆,所以 k = 5。
- 學號 0 用掉 3 根粉筆,所以 k = 2。
學號 1 沒有足夠的粉筆,所以他將會去替換粉筆。


解題思維:
假設所有學生所需之粉筆數總和為 T。所以教師將執行該過程 ceil(k ÷ T) 次。其中 ceil() 為上高斯函數,對於正數來說即無條件進位。

而我們只需要知道會停在哪位學生,所以粉筆數 k 等價於 k % T。其中「%」為取餘數之操作。

然後我們就僅僅只再跑過一次過程即可得到到哪位學生時粉筆不夠用。該學生之編號即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作