美文网首页
189. Rotate Array

189. Rotate Array

作者: Mree111 | 来源:发表于2019-10-08 12:35 被阅读0次

    Description

    Given an array, rotate the array to the right by k steps, where k is non-negative.

    Example 1:

    Input: [1,2,3,4,5,6,7] and k = 3
    Output: [5,6,7,1,2,3,4]
    Explanation:
    rotate 1 steps to the right: [7,1,2,3,4,5,6]
    rotate 2 steps to the right: [6,7,1,2,3,4,5]
    rotate 3 steps to the right: [5,6,7,1,2,3,4]
    Example 2:

    Input: [-1,-100,3,99] and k = 2
    Output: [3,99,-1,-100]
    Explanation:
    rotate 1 steps to the right: [99,-1,-100,3]
    rotate 2 steps to the right: [3,99,-1,-100]

    Solution

    用额外O(N)空间可以O(N) solve
    另外一种不需要额外空间的:

    1. reverse array (end& start 交换加指针移动)
    2. reverse 前k个
    3. reverse 后n-k个
    public class Solution {
        public void rotate(int[] nums, int k) {
            k %= nums.length;
            reverse(nums, 0, nums.length - 1);
            reverse(nums, 0, k - 1);
            reverse(nums, k, nums.length - 1);
        }
        public void reverse(int[] nums, int start, int end) {
            while (start < end) {
                int temp = nums[start];
                nums[start] = nums[end];
                nums[end] = temp;
                start++;
                end--;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:189. Rotate Array

          本文链接:https://www.haomeiwen.com/subject/kylbpctx.html