代码改变世界

Rotate Array

2015-03-05 14:39  笨笨的老兔子  阅读(150)  评论(0编辑  收藏  举报

将一个长度为n的数组循环右移k次

注意点:

  • k有可能大于n,需要取余。
  • 需要考虑空间开销,存在空间开销为O(1)的解法
  • 需要考虑时间开销

比较巧妙的方法是利用STL内置的reverse函数,做三次即可。
举个例子:array[7]={1,2,3,4,5,6,7},n=3

  1. 7,6,5,4,3,2,1
  2. 5,6,7,4,3,2,1
  3. 5,6,7,1,2,3,4

代码实现比较简单:

  1. class Solution {
  2. public:
  3. void rotate(int nums[], int n, int k) {
  4. k = k%n;
  5. reverse(nums, nums + n);
  6. reverse(nums, nums + k);
  7. reverse(nums + k, nums + n);
  8. }
  9. };