超时答案
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
void rotate(vector<int>& nums, int k) {
for (int i = 1; i <= k; i++){
moveOne(nums);
}
/*for (auto item : nums){
cout << item << endl;
}*/
}
private:
void moveOne(vector<int> &nums){
int size = nums.size() - 1;
int temp = nums[size];
for (int i = size; i >= 1; i--){//这里之前犯了一个错, 导致数据还没被使用就被覆盖了,答案直接出错
nums[i] = nums[i-1];
}
nums[0] = temp;
for (auto item : nums){
cout << item << endl;
}
cout << "#############" << endl;
}
};
int main()
{
vector<int> nums;
for (int i = 1; i < 7; i++){
nums.push_back(i);
}
Solution s = Solution();
s.rotate(nums, 3);
system("pause");
return 0;
}
通过的答案:
class Solution {
public:
void rotate(vector<int>& nums, int k) {//核心就是三次反转 前n-k个翻转 后k个翻转 然后整个数组翻转就可以了
int size = nums.size() ;
k = k%size;
if (k==0) return;
reverse(nums.begin(), nums.begin() + size - k ); // 前闭后开区间 所以只一个的末尾和下一个的开始是一样的,之前忽略了
reverse(nums.begin() + size - k , nums.end());
reverse(nums.begin(), nums.end());
for (auto item : nums){
cout << item << endl;
}
}
};