189 Rotate Array

Given an array, rotate the array to the right byk_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]

Note:

  • Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
  • Could you do it in-place with O(1) extra space?

Method 1: Time O(n) Space: O(n)

  • [x] (i + k) % nums.length
class Solution {
    public void rotate(int[] nums, int k) {
        int[] temp = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            temp[(i + k) % nums.length] = nums[i];
        }
        for (int i = 0; i < temp.length; i++) {
            nums[i] = temp[i];
        }
        return nums;
    }
}

Method 2 :

  • [x] Reverse :O(1) s-ace O(n) time

    1.reverse the whole array

  • reverse the first k element

  • reverse the n-k element

  • class Solution {
     public void rotate(int[] nums, int k) {
         k %= nums.length;// k = 10. length = 7
         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--;
         }
     }
    }
    

results matching ""

    No results matching ""