【力扣】189. 轮转数组

1. 题目介绍

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

在这里插入图片描述

2. 解法

2.1 方法一:不太正规,但是简单

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        k = k % len(nums)
        for i in range(k):
            tem = nums.pop()
            nums.insert(0, tem)
        return nums

2.2 方法二:使用额外的数组

class Solution {
public:
    void rotate(vector<int&gt;&amp; nums, int k) {
        int n = nums.size();
        vector<int&gt; newArr(n);
        for (int i = 0; i < n; ++i) {
            newArr[(i + k) % n] = nums[i];
        }
        nums.assign(newArr.begin(), newArr.end());
    }
};

2.3 方法三:环状替换

class Solution {
public:
    void rotate(vector<int>&amp; nums, int k) {
        int n = nums.size();
        k = k % n;
        int count = gcd(k, n);
        for (int start = 0; start < count; ++start) {
            int current = start;
            int prev = nums[start];
            do {
                int next = (current + k) % n;
                swap(nums[next], prev);
                current = next;
            } while (start != current);
        }
    }
};

2.4 方法四:数组翻转

在这里插入图片描述

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

    void rotate(vector<int>&amp; nums, int k) {
        k %= nums.size();
        reverse(nums, 0, nums.size() - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.size() - 1);
    }
};

3. Danger

力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。

参考

【1】链接https://leetcode.cn/problems/rotate-array/ 来源:力扣(LeetCode)

原文地址:https://blog.csdn.net/qq_51392112/article/details/134670019

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_4989.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注