Rotate Array

来源:互联网 发布:淘宝旺铺智能版好用吗? 编辑:程序博客网 时间:2024/06/09 20:50

【题目描述】

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;    }}



0 0
原创粉丝点击