【leetcode】2 数组元素右移

本文详细介绍了如何实现数组元素右移操作,包括核心旋转算法的解释与代码实现,适用于初学者理解数组操作的基本原理。

描述:数组元素个数为n,右移k位,如12345,右移3位后是34512

解答思路:将12345全旋转得到54321

     将前3位旋转34521

     将后两位旋转34512

处理核心是旋转reverse(vector<int> &nums,int begin,int end)

旋转分隔点是k=k%n  (k是移动位数,n是数组长度)

class Solution {
public:
    void reverse(vector<int>& num,int begin,int end){
        int t=begin+(end-begin)/2;
        int tmp=0;
        int i=0;
        while(begin<=t){
            tmp=num.at(begin);
            num.at(begin)=num.at(end-i);
            num.at(end-i)=tmp;
            begin++;
            i++;
        }
    }
    void rotate(vector<int>& nums, int k) {
        int n=nums.size();
            k=k%n;
        if(n==2 && k==1 ){
            int tmp=0;
            tmp=nums.at(0);
            nums.at(0)=nums.at(1);
            nums.at(1)=tmp;
           
        }else if(k==n ||k==0){
           
        }else if(k<n){
            reverse(nums,0,n-1);
            reverse(nums,0,k-1);
            reverse(nums,k,n-1);
        }
    }
};

转载于:https://www.cnblogs.com/wygyxrssxz/p/4483897.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值