找到了,这题和高级搜索树里面的就地循环移位是一个题。实际上就是一个经典问题,我记得在哪里,却不知道怎么解决。好像也知道一点,就是反转,然后再反转。利用空间局部性,把缓存的作用发挥到极致。注意这里的 k 和 ppt 里面的 m 不是一个东西,另外我们还需要考虑 k 如果比较大会发生什么情况,所以我们可以考虑用 k 对 n 取模,然后就可以算了。就是先对前面的反转,再对后面的反转,最后对整体反转,实际上非常非常简单。我非常不错!
cpp
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k %= n;
int m = n - k;
reverse( nums.begin(), nums.begin() + m );
reverse( nums.begin() + m, nums.end() );
reverse( nums.begin(), nums.end() );
}
};