天天看点

[Leetcode] 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.

[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;
        }
    }
};