(数组) leetcode 189. Rotate Array
注意:k可能比数组的长度大,所 k = k%n (n为数组长度)。
思路一:暴力法。循环移动k次。
class Solution { public: void rotate(vector<int>& nums, int k) { int a = 0; for(int i=0; i< k%nums.size(); ++i){ a = nums.back(); //取nums的最后一个元素 nums.insert(nums.begin(), a); //插入到nums开头 nums.pop_back(); //删除最后一个元素 } } };
思路二:先把前 n-k 个数字翻转一下,再把后k个数字翻转一下,最后再把整个数组翻转一下:
1 2 3 4 5 6 7
4 3 2 1 5 6 7
4 3 2 1 7 6 5
5 6 7 1 2 3 4
class Solution { public: void rotate(vector<int>& nums, int k) { int n = nums.size(); k = k%n; //k对n取余 if(nums.empty() || k ==0 ) return; reverse(nums.begin(), nums.begin()+n-k); // [first, end) reverse(nums.begin()+n-k, nums.end()); //reverse 从索引为n-k到末尾 reverse(nums.begin(), nums.end()); //reverse整个nums } };