前往
大廳
主題

LeetCode - 2582. Pass the Pillow 解題心得

Not In My Back Yard | 2024-02-06 12:00:08 | 巴幣 0 | 人氣 47

題目連結:


題目意譯:
現在有 n 個人站在一條線上並編號為 1 到 n。線上第一個人一開始正拿著一顆枕頭。每一秒,拿著枕頭的人將會把枕頭傳給線上的下一個人。一旦枕頭抵達線的結尾,則方向將會翻轉,而人們將會繼續往相反方向傳遞枕頭。

例如說,一旦枕頭抵達第 n 個人,他將會把枕頭傳給第 n - 1 個人;然後他再傳給第 n - 2 個人,以此類推。

給定兩正整數 n 和 time,回傳 time 秒後拿著枕頭的人之編號。

限制:
2 ≦ n ≦ 1000
1 ≦ time ≦ 1000



範例測資:
範例 1:
輸入: n = 4, time = 5
輸出: 2
解釋: 人們傳遞枕頭的順序為:1 -> 2 -> 3 -> 4 -> 3 -> 2。
在五秒後,枕頭將會被傳到第 2 個人手上。

範例 2:
輸入: n = 3, time = 2
輸出: 3
解釋: 人們傳遞枕頭的順序為:1 -> 2 -> 3。
在五秒後,枕頭將會被傳到第 3 個人手上。


解題思維:
因為 time 最大也只有 1000 而已,因此如果要直接模擬也是可行的。



不過,我們可以看到 time 每 2(n - 1) 便會循環一次(因為從左至右要傳 n - 1 次,而反過來也要傳 n - 1 次)。因此我們可以先將 time 模 2(n - 1),(儘管對於這題的數字範圍用處不大)。

接著我們判斷「等價後」的 time 值(此時其值應位於 0(含)~ 2n - 3(含)之間)是位於前半部分(即左到右)還是後半部分(即右到左)。

如果是前半(此時 0 ≦ time ≦ n - 1),則 time + 1 即是最後停留的人之編號;如果是後半則為 2n - time - 1。




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

創作回應

更多創作