LeetCode 189. 旋转数组(原地解法)
原题链接
中等
作者:
我要出去乱说
,
2021-03-23 20:38:35
,
所有人可见
,
阅读 281
非原地解法
时间复杂度:$O(N)$
空间复杂度:$O(N)$
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k %= n;
vector<int> res(n);
for (int i = 0; i < n; i ++ )
res[(i + k) % n] = nums[i];
nums = res;
}
};
原地解法
时间复杂度:$O(N)$
空间复杂度:$O(1)$
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k %= n;
reverse(nums.begin(), nums.end()); //整个翻转
reverse(nums.begin(), nums.begin() + k);//分界点左边翻转,注意右边界是不包含begin()+k这个点的
reverse(nums.begin() + k, nums.end()); //分界点右边翻转
}
};
兄弟,还在吗,麻烦看一下私聊,有个问题想请教一下