[Leetcode] 189. Rotate Array 解题报告

来源:互联网 发布:ubuntu vi 不保存退出 编辑:程序博客网 时间:2024/06/05 15:40

题目

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.

[show hint]

Hint:
Could you do it in-place with O(1) extra space?

Related problem: Reverse Words in a String II

思路

本题应该有很多种不同解法,这里提供其中一种比较简单的解法。时间复杂度O(n),空间复杂度O(1)。

代码

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 low, int high) {        while(low < high) {            int temp = nums[low];            nums[low] = nums[high];            nums[high] = temp;            ++low, --high;        }    }};