leetcode189旋转数组解决——局部旋转 (C/C++/python)

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

示例 1:

[5,6,7,1,2,3,4]
[7,1,2,3,4,5,6]
[6,7,1,2,3,4,5]
[5,6,7,1,2,3,4]

Solution:
局部旋转  时间复杂度O(n),空间复杂度O(1)

原数组
复制代码
class Solution {
public:
    void reverse(vector<int>& nums,int start,int end) {
        while(start<end) {
            swap(nums.at(start),nums.at(end));
            start++;
            end--;
        }
    }
    void rotate(vector<int>& nums, int k) {
        k%=nums.size();//注意k<=sizeofnum//旋转k+n*size等同于旋转k
        reverse(nums,0,nums.size()-1);
        reverse(nums,0,k-1);
        reverse(nums,k,nums.size()-1);

    }
};
复制代码

python:

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """

        k=k%len(nums)
        nums[:]=nums[-k:len(nums):1]+nums[0:-k:1]

 

posted @   夫琅禾费米线  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示