189. Rotate Array

来源:互联网 发布:虚拟货币平台源码 编辑:程序博客网 时间:2024/05/17 09:04

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

 數組裡面的元素有n個,從第k個開始進行翻轉,例如:

[1,2,3,4,5,6,7] 翻轉為 [5,6,7,1,2,3,4]


題解:

將數組分為兩段:
  1 2 3 4 | 5 6 7
 1.翻轉第一段
   4 3 2 1 | 5 6 7
 2.翻轉第二段
   4 3 2 1 | 7 6 5
 3.再整個翻轉
   5 6 7 1 2 3 4

package LeetCode.Easy;public class RotateArray {/* * 將數組分為兩段: * 1 2 3 4 | 5 6 7 * 1.翻轉第一段 * 4 3 2 1 | 5 6 7 * 2.翻轉第二段 * 4 3 2 1 | 7 6 5 * 3.再整個翻轉 * 5 6 7 1 2 3 4*/    public void rotate(int[] nums, int k) {    int n = nums.length;    k = k % n; //取得最後面的k位數    reverse(nums, 0, n - k); //翻轉第一段    reverse(nums, n - k, n); //翻轉第二段    reverse(nums, 0, n); //再整個翻轉    }        void reverse(int[] nums, int begin, int end) {    int left = begin;    int right = end - 1;    while(left < right) {    swap(nums, left, right);    left ++;    right --;    }    }        void swap(int[] nums, int i, int j) {    int temp = nums[i];    nums[i] = nums[j];    nums[j] = temp;    }}