leetcode 189轮转数组

cpp 复制代码
class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int>res(n,0);
        for(int i=0;i<n;i++){
            res[(i+k)%n] = nums[i];
        }
        nums = res;
    }    
};

这段代码的核心思路是:先把每个元素放到旋转后的新位置,再把结果赋值回原数组。

例如原数组:

复制代码
nums = {1,2,3,4,5,6,7};
k = 3;

数组长度:

复制代码
n = 7;

创建一个临时数组:

复制代码
vector<int> res(n, 0);

然后遍历原数组,把原来下标为 i 的元素放到:

复制代码
(i + k) % n

这个新位置中。例如:

复制代码
nums[0] = 1

原下标是 0,右移 3 位后:

复制代码
(0 + 3) % 7 = 3

所以:

复制代码
res[3] = 1;

再比如:

复制代码
nums[5] = 6

新下标:

复制代码
(5 + 3) % 7 = 1

所以:

复制代码
res[1] = 6;

这里 % n 的作用就是超过数组末尾后重新绕回数组开头

全部移动完成后:

复制代码
res = {5,6,7,1,2,3,4};

最后:

复制代码
nums = res;

把旋转后的结果整体赋值回 nums。因为 nums 是引用参数:

复制代码
vector<int>& nums

所以原数组也会真正被修改。

可以直接记成一句话:

原位置 i 的元素,右移 k 位后的新位置是 (i+k)%n,全部放进 res 后,再执行 nums = res

题解2:翻转数组

cpp 复制代码
class Solution {
public:
    void reverse(vector<int>& nums, int start, int end) {
        while (start < end) {
            swap(nums[start], nums[end]);
            start += 1;
            end -= 1;
        }
    }

    void rotate(vector<int>& nums, int k) {
        k %= nums.size();
        reverse(nums, 0, nums.size() - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.size() - 1);
    }
};
复制代码
nums = "----->-->"; k =3
result = "-->----->";

reverse "----->-->" we can get "<--<-----"
reverse "<--" we can get "--><-----"
reverse "<-----" we can get "-->----->"
this visualization help me figure it out :)
相关推荐
北域码匠9 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
指掀涛澜天下惊9 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
乌萨奇也要立志学C++9 小时前
【洛谷】kmp算法
开发语言·算法
禹凕9 小时前
Dijkstra算法详解与应用
python·算法
YaraMemo10 小时前
元启发式算法框架
人工智能·算法·5g·信息与通信·启发式算法·信号处理
weixin_3077791311 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab
HugoStudio_SWAN11 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全
枫叶林FYL12 小时前
【群体智能集群控制工程实践】第3章 一致性协同算法
算法
禹凕12 小时前
滑动窗口算法实战指南
python·算法
DisonTangor12 小时前
【腾讯混元雪耻归来】 Hy4 preview:770B 参数 MoE 旗舰模型,1M 上下文全面开源
人工智能·算法·开源·aigc·腾讯云·腾讯云ai代码助手