【Leetcode】189.轮转数组

题目链接:

189.轮转数组

题目描述:


解题思路:

要想实现数组元素向右轮转k个位置,可是将数组三次反转来实现

以 nums = [1,2,3,4,5,6,7], k = 3 为例,最终要得到[5,6,7,1,2,3,4]:

  • 第一次反转:将整个数组反转得到 [7,6,5,4,3,2,1]
  • 第二次反转:将前k个元素进行反转得到[5,6,7,4,3,2,1]
  • 第三次反转:将最后n-k个元素进行反转得到[5,6,7,1,2,3,4],n为数组nums长度

复杂度分析:

  • 时间复杂度O(N)
  • 空间复杂度O(1)

代码实现:

cpp 复制代码
class Solution {
public:
    void reverse(vector<int>& nums, int start, int stop){
        int p1 = start;
        int p2 = stop;
        int temp;
        while(p2>p1){
            temp = nums[p1];
            nums[p1] = nums[p2];
            nums[p2] = temp;
            p1++;
            p2--;
        }
    }
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        reverse(nums, 0, n-1);
        reverse(nums, 0, k%n-1);
        reverse(nums, k%n, n-1);
    }
};
相关推荐
考研保研资料分享2 小时前
2022编辑出版跨保西北大学中国史:五校面试与九月补材料
面试·职场和发展
Lhan.zzZ2 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
Data analyse4563 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
员工风险管理实务3 小时前
职务侵占有什么价值?岗位关联性与必要性判断
职场和发展
sysu_chenxy4 小时前
二重循环输出二维图形
c++
Navigator_Z4 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil2085 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展
光影少年5 小时前
AI Agent、自动化与未来工作
人工智能·算法·架构
牧羊人.3335 小时前
计算机视觉基础 第16章|EigenFace,FisherFace,LBPH传统人脸识别算法
人工智能·算法·计算机视觉
考研保研资料分享5 小时前
双非新闻学保研复盘:东华小组展示、长安面试与兰大预推免
面试·职场和发展