输入:数组 nums,整数 k。
要求:将数组中的元素向右轮转 k 个位置。
输出:轮转后的数组 nums。
思路1:额外数组。
- 新建一个同大小数组 result。
- 通过公式 `(i + k) % n` 计算元素的新位置,填入 result。
- 再把 result 赋回 nums。
- 时间复杂度:O(n),空间复杂度:O(n)。
思路2:数组反转。
- 先计算有效位移 k = k % n。
- 将整个数组反转 → 得到 [-k, -(n-k)]。(-号表示反转)
- 再分别反转前 k 个元素和后 n-k 个元素 → 得到最终结果。
- 时间复杂度:O(n),空间复杂度:O(1)。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k = k % n;
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin()+k);
reverse(nums.begin()+k, nums.end());
}
};

130

被折叠的 条评论
为什么被折叠?



