码迷,mamicode.com
首页 > 编程语言 > 详细

【数组】189. 旋转数组

时间:2020-05-04 17:45:20      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:mamicode   size   解答   旋转数组   图片   color   span   tar   数组   

题目:

技术图片

 

 

解答:

使用反转。

这个方法基于这个事实:当我们旋转数组 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. 旋转数组

标签:mamicode   size   解答   旋转数组   图片   color   span   tar   数组   

原文地址:https://www.cnblogs.com/ocpc/p/12827122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!