数组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. 旋转数组的主要内容,如果未能解决你的问题,请参考以下文章

前端与算法 leetcode 189. 旋转数组

leetcode189旋转数组

189. 旋转数组

数组旋转 Leetcode#189

189. 旋转数组

189-旋转数组