标签:
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 class Solution { 2 public: 3 void rotate(vector<int>& nums, int k) { 4 if(k > nums.size()) k %= nums.size();//这里要注意,k的大小可能比size要大一点 5 vector<int> tmpVec1{nums.begin(), nums.begin() + (nums.size() - k)}; 6 vector<int> tmpVec2{nums.begin() + (nums.size() - k), nums.end()}; 7 int sz1 = tmpVec1.size(); 8 for(int i = 0; i < sz1; ++i){ 9 tmpVec2.push_back(tmpVec1[i]); 10 } 11 nums = tmpVec2; 12 } 13 };
上面这个是数组拷贝的方法,不过速度比较慢一点,一开始用一个二重循环来解决,不过那样总是超时,所以又想了上面这个方法。
还有题目说了希望可以用到O(1)的额外空间。看了下别人写的:炒鸡简单啊
1 class Solution { 2 public: 3 void rotate(vector<int>& nums, int k) { 4 int sz = nums.size(); 5 k %= sz; 6 reverse(nums.begin(), nums.begin() + (sz - k)); 7 reverse(nums.begin() + (sz - k), nums.end()); 8 reverse(nums.begin(), nums.end()); 9 } 10 };
先把前面的部分反转,再将后面的部分反转,最后再做一次反转就可以了。
LeetCode OJ:Rotate Array(倒置数组)
标签:
原文地址:http://www.cnblogs.com/-wang-cheng/p/4892791.html