189. Rotate Array

解法

由於題目限定要 $O(1)$ 完成,我們可以先將數列全部反轉,12345678 變成 87654321,再來找出從哪個點在選轉後來到第一位假設選轉後 5 變第一位則變為 56784321,之後再將未反轉的進行反轉就好,變成 56781234

核心想法是: 由於數字肯定有序,並且一定是從特定值開始依序,在回到 1234,故可使用字串反轉。

程式碼

1
2
3
4
5
6
7
8
9
10
11
12
using namespace std;

class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k = k % n;
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin() + k );
reverse(nums.begin()+k, nums.end());
}
};
  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: