Leetcode 189 Rotate Array stl

题意:将数组旋转k次,如将数组[1,2,3,4,5]旋转1次得到[2,3,4,5,1],将数组[1,2,3,4,5]旋转2次得到[3,4,5,1,2].....

本质是将数组分成两部分a1,a2,...ak以及ak+1....an两部分,然后将两部分进行交换。

我的解法是将数组分成两部分a1,a2,.....an-k-1以及an-k,.....an,然后将两部分分别反转得到数组ank-1,.....,a2,a1,an......an-k

然后将这个数组反转得到an-k,.....an,a1,a2,....ank-1。

这个算法复杂度为O(n),空间复杂度O(1).

 1 class Solution {
 2 public:
 3     void rotate(vector<int>& nums, int k) {
 4         if(nums.size() == 0) return; 
 5         k %= nums.size();
 6         if(0 == k) return;
 7         reverse(nums.begin(), nums.end() - k);
 8         reverse(nums.end() - k, nums.end());
 9         reverse(nums.begin(), nums.end());
10     }
11 };

 

posted @ 2016-05-20 14:07  Breeze0806  阅读(141)  评论(0编辑  收藏  举报