前往
大廳
主題

LeetCode - 2073. Time Needed to Buy Tickets 解題心得

Not In My Back Yard | 2022-05-09 00:00:17 | 巴幣 2 | 人氣 357

題目連結:


題目意譯:
現有 n 個人排成一列要買票,其中第 0 個人在隊伍前頭且第 n - 1 個人在隊伍結尾。

你被給定一個索引值從 0 開始數之長度為 n 的整數陣列 tickets,其中第 i 個人想要買的票數為 tickets[i]。

每一人每買一張票恰好要花一秒。每一人一次只能買一張票,且必須回到隊伍結尾(且這兩件事同時發生)來買更多的票。如果某人沒有更多的票需要買,則該人將離開隊列。

回傳位置 k 的人完成其買票行為的所需時間。

限制:
n == tickets.length
1 ≦ n ≦ 100
1 ≦ tickets[i] ≦ 100
0 ≦ k < n



範例測資:
範例 1:
輸入: tickets = [2,3,2], k = 2
輸出: 6
解釋:
- 在第一輪中,所有人買了一張票,隊伍變成了 [1, 2, 1]。
- 在第二輪中,所有人買了一張票,隊伍變成了 [0, 1, 0]。
位置 2 的人成功買了 2 張票,且其所耗時間為 3 + 3 = 6 秒。

範例 2:
輸入: tickets = [5,1,1,1], k = 0
輸出: 8
解釋:
- 在第一輪中,所有人買了一張票,隊伍變成了 [4, 0, 0, 0]。
- 在接下來四輪中,只有位置 0 的人在買票。
位置 0 的人成功買了 5 張票,且其所耗時間為 4 + 1 + 1 + 1 + 1 = 8 秒。


解題思維:
由於數字範圍很小,所以直接模擬即可(不需什麼特殊的處理):
一直從第 0 個人跑到第 n - 1 個人,來完成一輪買票。

在一輪中,如果跑到票已經買滿的人就忽略,不計秒數;其他就將秒數 + 1。而如果遇到目標的第 k 個人,則檢查他是否在此輪買完票,如果是則回傳當前的秒數即是所求。




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

創作回應

相關創作

更多創作