LeetCode 189. Rotate Array

来源:互联网 发布:java项目评估技术方案 编辑:程序博客网 时间:2024/05/22 16:56

189. Rotate Array

一、问题描述

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

二、输入输出

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

三、解题思路

直接构造

  • 直接从后面截取出要翻转的部分,然后重新组装数组就行了
class Solution {public:    void rotate(vector<int>& nums, int k) {        k = k % nums.size();        vector<int> frontV, backV;        frontV.insert(frontV.begin(), nums.begin(), nums.end()-k);        backV.insert(backV.begin(), nums.end()-k, nums.end());        nums.clear();        nums.insert(nums.begin(), backV.begin(), backV.end());        nums.insert(nums.end(), frontV.begin(), frontV.end());    }};

翻转+翻转

  • 这种方法更常用,想要翻转数组,先把整个数组都翻转了。这样后面的部分和前面的部分就翻转过来了,但是每一部分内部也被翻转了。没关系,我们分别再把前后两部分单独翻转一下就行了。
class Solution {public:    void rotate(vector<int>& nums, int k) {        k = k % nums.size();        reverse(nums.begin(), nums.end());        reverse(nums.begin(), nums.begin()+k);        reverse(nums.begin()+k, nums.end());    }};