Rotate Array

【题目描述】

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

【思路】

1.每次都是把第n-1个数插入到最前面,最后再将这个vector resize一下就可以了。

2.重新声明一个vector变量tmp,其与nums的元素对应位置为tmp[(i+k)%n]=nums[i],最后再将tmp重赋给nums.但要注意一点,记得初始化vector变量tmp。

3.将数组分成两部分,先roate整个数组,再roate第一部分,最后roate第二部分。

【代码】

思路1:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int n=nums.size();
        k=k%n;
        int cnt=0;
        while(cnt!=k){
            nums.insert(nums.begin(),nums[n-1]);
            cnt++;
        }
        nums.resize(n);
    }
};

思路2:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int n=nums.size();
        vector<int> tmp(n,0);
        if(k==0) return;
        for(int i=0;i<n;i++){
            tmp[(i+k)%n]=nums[i];
        }
        nums=tmp;
    }
};

思路3:

void rotate(int* nums, int numsSize, int k) {
     k=k%numsSize;
     reverse(nums,numsSize);
     reverse(nums,k);
     reverse(&nums[k],numsSize-k);
}

void reverse(int* nums,int n){
    int mid=n/2;
    int tmp;
    for(int i=0;i<mid;i++){
        tmp=nums[i];
        nums[i]=nums[n-i-1];
        nums[n-i-1]=tmp;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值