力扣189. 轮转数组

Problem: 189. 轮转数组

文章目录

题目描述

思路

思路1:利用辅助数组

利用题目所的一个规律(nums[i+k] % nums.length) (现在的数组) = nums[i] (以前的数组),则我们利用一个辅助数组将轮转后的数字存入到指定位置,然后再将其赋值给nums

思路2:原地翻转数组

先将数组整个反转,再将索引位置为[0 ~ k m o d mod mod n - 1]位置的元素反转(其中 n n n为数组的大小),最后将索引位置为[k~ k m o d mod mod n - 1]位置的元素反转即为最终的结果

复杂度

思路1:

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为数组nums的大小

空间复杂度:

O ( n ) O(n) O(n)

思路2:

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( 1 ) O(1) O(1)

Code

cpp 复制代码
class Solution {
public:
    /**
     *
     * @param nums To be operated array
     * @param k Specifies the number of rotations
     */
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> temp(n);
        for (int i = 0; i < n; ++i) {
            temp[(i + k) % n] = nums[i];
        }
        for (int i = 0; i < n; ++i) {
            nums[i] = temp[i];
        }
    }
};
cpp 复制代码
class Solution {
public:
    /**
     * 
     * @param nums To be operated array
     * @param k Specifies the number of rotations
     */
    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);
        
    }
    void reverse(vector<int>& nums, int left, int right) {
        int n = nums.size();
        while (left < right) {
            swap(nums[left], nums[right]);
            left++;
            right--;
        }
    }
};
相关推荐
Zero不爱吃饭8 分钟前
将有序数组转换为二叉搜索树
数据结构·算法
这个世界的真神15 分钟前
【每日算法】 洛谷 P12341 【[蓝桥杯 2025 省 A/Python B 第二场] 消消乐】 2025.10.26
python·算法·蓝桥杯
l1t22 分钟前
利用DeepSeek改写递归CTE SQL语句为Python程序及优化
数据库·人工智能·python·sql·算法·性能优化·deepseek
workflower2 小时前
微软PM的来历
java·开发语言·算法·microsoft·django·结对编程
JianminZheng5 小时前
MTPA算法原理及仿真验证
算法
im_AMBER6 小时前
Leetcode 38
笔记·学习·算法·leetcode
Miraitowa_cheems6 小时前
LeetCode算法日记 - Day 82: 环形子数组的最大和
java·数据结构·算法·leetcode·决策树·线性回归·深度优先
Code_Shark7 小时前
AtCoder Beginner Contest 426 题解
数据结构·c++·算法·数学建模·青少年编程
仰泳的熊猫7 小时前
LeetCode:698. 划分为k个相等的子集
数据结构·c++·算法·leetcode
豐儀麟阁贵7 小时前
4.5数组排序算法
java·开发语言·数据结构·算法·排序算法