数组
// 反转数组 void rotate(vector<int>& nums, int k) { if (nums.empty() || (k %= nums.size()) == 0) return; int n = nums.size(); reverse(nums.begin(), nums.begin() + n - k);//先反转前n-k个 reverse(nums.begin() + n - k, nums.end());//再反转后面的 reverse(nums.begin(), nums.end());//最后整体反转 }
//更快地反转数组 void rotate(vector<int>& nums, int k) { if (nums.empty() || (k %= nums.size()) == 0) return; int n = nums.size(), start = 0, i = 0, cur = nums[i], cnt = 0;//通过更多的辅助变量达到目的 逻辑较为复杂 while (cnt++ < n) { i = (i + k) % n; int t = nums[i]; nums[i] = cur; if (i == start) { ++start; ++i; cur = nums[i]; } else { cur = t; } } }