
class Solution { public: // 通过1 time 0ms 100% space 30.mb 5% 自己 内存大 void rotate1(vector<int>& nums, int k) { // 1 余数 2 是否大于边界 // 10 6 16=6 12-10=2 cout<<"k "<<k<<endl; cout<<"nums.size() "<<nums.size()<<endl; vector<int> nums_new; k = k%nums.size(); //int temp_last=nums.back(); for(int i=0;i<nums.size();++i){ int newi=0; if(i-k<0) newi=nums.size()+i-k; else newi=i-k; nums_new.push_back(nums[newi]); } nums = nums_new; } // 通过2 time 4ms 7.64% space 29mb 32% 自己 内存大 void rotate2(vector<int>& nums, int k) { // 1 余数 2 是否大于边界 // 10 6 16=6 12-10=2 cout<<"k "<<k<<endl; cout<<"nums.size() "<<nums.size()<<endl; vector<int> nums_new; k = k%nums.size(); if(k==0) return; vector<int> tempk; for(int i=0;i<k;i++){ int new_i=i+k; if(new_i>=nums.size()) new_i=new_i-nums.size(); tempk.push_back(nums[new_i]); nums[new_i]=nums[i]; } for(int i=k;i<nums.size();i++){ int new_i=i+k; if(new_i>=nums.size()) new_i=new_i-nums.size(); swap(nums[new_i],tempk[i%k]); } } // 官方0 ms 100% 28.3mb 87% 这是个纯取巧的活 void rotate(vector<int>& nums, int k) { auto reverse = [&](int i, int j) { while (i < j) { swap(nums[i++], nums[j--]); } }; int n = nums.size(); k %= n; // 轮转 k 次等于轮转 k % n 次 reverse(0, n - 1); reverse(0, k - 1); reverse(k, n - 1); } };
浙公网安备 33010602011771号