标签:
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]
.
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Related problem: Reverse Words in a String II
Analyse: Flip the entire array, flip the first k elements, then flip the remaining elements.
Runtime: 16ms. Beat 98.91%...
1 class Solution { 2 public: 3 void flipArray(vector<int>& nums, int start, int end){ 4 for(int i = start, j = end; i < j; i++, j--) 5 swap(nums[i], nums[j]); 6 } 7 8 void rotate(vector<int>& nums, int k) { 9 if(nums.empty()) return; 10 11 k %= nums.size(); // if k is larger than nums.size() 12 if(k == 0) return; 13 14 flipArray(nums, 0, nums.size() - 1); 15 flipArray(nums, 0, k - 1); 16 flipArray(nums, k, nums.size() - 1); 17 } 18 };
标签:
原文地址:http://www.cnblogs.com/amazingzoe/p/5895688.html