【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);
    }
};
相关推荐
adam_life2 分钟前
http://noi.openjudge.cn/——2.5基本算法之搜索——200:Solitaire
算法·宽搜·布局唯一码
超爱笑嘻嘻24 分钟前
shared_ptr八股收集 C++
c++
我想进大厂44 分钟前
图论---朴素Prim(稠密图)
数据结构·c++·算法·图论
我想进大厂1 小时前
图论---Bellman-Ford算法
数据结构·c++·算法·图论
AIGC大时代1 小时前
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
数据库·人工智能·算法·aigc·智能写作·deepseek
光而不耀@lgy1 小时前
C++初登门槛
linux·开发语言·网络·c++·后端
啊丢_1 小时前
C++——Lambda表达式
开发语言·c++
CODE_RabbitV1 小时前
【深度强化学习 DRL 快速实践】近端策略优化 (PPO)
算法
宝耶2 小时前
面试常问问题:Java基础篇
java·面试·职场和发展
Wendy_robot2 小时前
【滑动窗口+哈希表/数组记录】Leetcode 438. 找到字符串中所有字母异位词
c++·算法·leetcode