数组189. 旋转数组
Posted ocpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组189. 旋转数组相关的知识,希望对你有一定的参考价值。
题目:
解答:
使用反转。
这个方法基于这个事实:当我们旋转数组 k 次, k\\%nk%n 个尾部元素会被移动到头部,剩下的元素会被向后移动。
在这个方法中,我们首先将所有元素反转。然后反转前 k 个元素,再反转后面 n-kn−k 个元素,就能得到想要的结果。
假设 n=7且 k=3 。
原始数组 : 1 2 3 4 5 6 7
反转所有数字后 : 7 6 5 4 3 2 1
反转前 k 个数字后 : 5 6 7 4 3 2 1
反转后 n-k 个数字后 : 5 6 7 1 2 3 4 --> 结果
1 class Solution { 2 public: 3 void rotate(vector<int>& nums, int k) 4 { 5 k = k % nums.size(); 6 7 reverse(nums, 0, nums.size() - 1); 8 reverse(nums, 0, k -1); 9 reverse(nums, k, nums.size() - 1); 10 } 11 12 void reverse(vector<int> &nums, int start, int end) 13 { 14 while (start < end) 15 { 16 int temp = nums[start]; 17 nums[start] = nums[end]; 18 nums[end] = temp; 19 start++; 20 end--; 21 } 22 } 23 };
以上是关于数组189. 旋转数组的主要内容,如果未能解决你的问题,请参考以下文章