Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4] .
<Solution>這題和 Rotate List 是關聯題,資料結構變成 vector,難度有降低
解題想法一樣
- 因為 k 有可能很大,但 rotate 是會循環的,所以先將 k = k % nums.size()
- 接下來,就是把最後一個元素拿掉,並塞到前面,重覆這個動作 k 次
這題還有另外一個想法(參考資料)
因為每次往右 shift,就是把最後面的元素移到最前面,其餘向右移動
所以其實可以先 reverse 整個 vector,把最後面的元素擺到最前面
1 2 3 4 5 6 7 -> 7 6 5 4 3 2 1
假設 k = 3,那麼代表最後一個元素 7 應該是會出現在位置 3 的地方
所以這邊將前 k 個元素再反轉,這樣前半部分就等同於往右 shift k 步
7 6 5 4 3 2 1 -> 5 6 7 4 3 2 1
最後,再把剩下的元素做反轉,就得到答案了
5 6 7 4 3 2 1 -> 5 6 7 1 2 3 4
code 如下
沒有留言:
張貼留言