首页 > 编程语言 > 详细

leetcode189. 旋转数组

时间:2019-11-15 22:18:03      阅读:78      评论:0      收藏:0      [点我收藏+]

方法 4:使用反转
算法

这个方法基于这个事实:当我们旋转数组 k 次, k\%nk%n 个尾部元素会被移动到头部,剩下的元素会被向后移动。

在这个方法中,我们首先将所有元素反转。然后反转前 k 个元素,再反转后面 n-kn−k 个元素,就能得到想要的结果。

假设 n=7n=7 且 k=3k=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 --> 结果

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        
        k=k%nums.size();
        reverse(nums,0,nums.size()-1);
        reverse(nums,0,k-1);
        reverse(nums,k,nums.size()-1);
    }
    void reverse(vector<int>& nums,int start,int endm)
    {
        while(start<endm)
        {
            int temp=nums[endm];
            nums[endm]=nums[start];
            nums[start]=temp;
            start++;
            endm--;
        }
        
    }
};

 

leetcode189. 旋转数组

原文:https://www.cnblogs.com/renzmin/p/11869782.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!