[LeetCode]189. Rotate Array
题目描述
思路
暴力解法:
计算要移动的次数k,然后将vector尾的数据弹出,插入vector第一位
换种思路:
只要三次reverse即可
假设数组为{1, 2, 3, 4}, k = 1
index | 0 | 1 | 2 | 3 |
---|---|---|---|---|
原数组 | 1 | 2 | 3 | 4 |
第一次reverse | 4 | 3 | 2 | 1 |
第二次reverse | 3 | 4 | 2 | 1 |
第三次reverse | 3 | 1 | 2 | 4 |
代码
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
void rotate(vector<int>& nums, int k) {
/*
k = k % nums.size();
while (k--) {
nums.insert(nums.begin(), nums[nums.size() - 1]);
nums.pop_back();
}
*/
int len = nums.size();
k %= len;
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin() + k);
reverse(nums.begin() + k, nums.end());
}
};
int main() {
vector<int> nums = { 1, 2, 3};
Solution s;
s.rotate(nums, 2);
for (int p : nums)
cout << p << " ";
cout << endl;
system("pause");
return 0;
}