Rotate Array

问题来源:https://leetcode.com/problems/rotate-array/

/**
 * 
 * <p>
 * ClassName RotateArray
 * </p>
 * <p>
 * Description 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]
 * 
 * Related problem: Reverse Words in a String II
 * </p>
 * 
 * @author TKPad wangx89@126.com
 *         <p>
 *         Date 2015年3月18日 下午5:18:17
 *         </p>
 * @version V1.0.0
 *
 */
public class RotateArray {
    public void rotate(int[] nums, int k) {
        k = k % nums.length;// 取余。由于一个循环,事实上数组是不变的
        reverse(nums, 0, nums.length - k);
        reverse(nums, nums.length - k, nums.length);
        reverse(nums, 0, nums.length);
    }

    public void reverse(int[] nums, int start, int end) {
        if (nums.length == 1) {
            return;
        }
        if (start == 0) {
            for (int i = start; i < (end + start) / 2; i++) {
                int temp = nums[i];
                nums[i] = nums[end - i - 1];
                nums[end - i - 1] = temp;
            }
        } else {
            for (int i = start; i < (end + start) / 2; i++) {
                int temp = nums[i];
                nums[i] = nums[end + start - i - 1];
                nums[end + start - i - 1] = temp;
            }
        }
    }

    public void print(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i] + "    ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // 測试数据集 [-1],2
        // 測试数据集 [1,2],3
        // 測试数据集 [1,2,3,4,5,6,7],3
        int[] i = new int[] { 1, 2, 3, 4, 5, 6, 7 };
        new RotateArray().rotate(i, 3);
    }
}
posted @ 2017-07-05 09:05  lytwajue  阅读(152)  评论(0编辑  收藏  举报