189. Rotate Array

一、题目

  1、审题

  

  2、分析

    给出一个整形数组,将每一个元素向右边移动 k 个元素。

 

二、解答

  1、思路:

    ①、将数组整体翻转一遍;

    ②、将数组从 (0,K-1)翻转一遍; 则前 K 个元素已经符合;

    ③、将数组从(K,end)翻转一遍;则后边 end - K 个元素已经符合;

    public void rotate(int[] nums, int k) {
        k = k % nums.length;
        reverse(nums, 0, nums.length - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.length - 1);
    }
    
    private void reverse(int[] nums, int start, int end) {
        while(start < end) {
            int tmp = nums[start];
            nums[start] = nums[end];
            nums[end] = tmp;
            start++;
            end--;
        }
    }

 

posted @ 2018-10-17 16:53  skillking2  阅读(115)  评论(0编辑  收藏  举报