Leetcode 189. Rotate Array

来源:互联网 发布:mac air怎么安装双系统 编辑:程序博客网 时间:2024/04/30 04:16

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].

题目要求讲一个数组循环右移k位。

方法一:严格按照右移定义。可按k和(1/2)n的相对大小设计左移和右移,但是时间复杂度高,超出运行时间限制。

void rotate(int nums[], int n, int k) {    int temp;    k%=n;    for (int step = 0; step < k; step++) {        temp = nums[n-1];        for (int i = n-1; i > 0; --i)        {            nums[i] = nums[i-1];        }        nums[0] = temp;    }}

方法二:思路也很清晰,无技巧。用时56s。

class Solution {public:    void rotate(vector<int>& nums, int k) {        int n=nums.size();        k%=n;        for(int i=0;i<n-k;++i){            nums.push_back(nums[0]);            vector<int>::iterator ite=nums.begin();            nums.erase(ite);        }    }};

方法三:运用技巧型。进行三次反转,一次对前n-k个,一次对剩下k个,最后整体反转。用时24s

class Solution {public:    void rotate(vector<int>& nums, int k) {        int n=nums.size();        k%=n;        vector<int>::iterator ite=nums.begin();        reverse(ite,ite+n-k);        reverse(ite+n-k,ite+n);        reverse(ite,ite+n);    }};
0 0
原创粉丝点击