← Arrays

Rotate Array

Medium
Python
def rotate(nums,k):
    k%=len(nums)
    nums[:]=nums[-k:]+nums[:-k]
Java
public void rotate(int[] nums,int k){
    k%=nums.length;
    rev(nums,0,nums.length-1); rev(nums,0,k-1); rev(nums,k,nums.length-1);
}
void rev(int[] a,int l,int r){
    while(l<r){int t=a[l];a[l++]=a[r];a[r--]=t;}
}

Key Insight

Python slicing trivial. Java three-reverse trick.

Python → Java Differences

  • Python slicing one-liner
  • Java three-reverse algorithm
  • Different approaches same result
Python
def rotate(nums,k):
    k%=len(nums)
    nums[:]=nums[-k:]+nums[:-k]
Java
public void rotate(int[] nums,int k){
    k%=nums.length;
    rev(nums,0,nums.length-1); rev(nums,0,k-1); rev(nums,k,nums.length-1);
}
void rev(int[] a,int l,int r){
    while(l<r){int t=a[l];a[l++]=a[r];a[r--]=t;}
}

Algorithm Steps

1. k = k % length
2. Three reverses