2017-01-23 53 views
0

我已經知道如何做到這一點與數組長度爲3,但我需要幫助做這與所有長度的數組。如何將數組中的所有元素左移?

public int[] rotateLeft3(int[] nums) { 
    int[] array = {nums[1], nums[2], nums[0]}; 
    return array; 
} 
+0

請參閱本http://stackoverflow.com/questions/7970857/java-shifting-elements-in-an-array和http://stackoverflow.com/questions/31834786/move-elements-n向左挑戰 –

+5

[Java,在數組中移位元素]的可能副本(http://stackoverflow.com/questions/7970857/java-shifting-elements-in-an-array) – CozyAzure

+0

你知道如何編寫一個循環?你需要一個。 – ajb

回答

0

這是循環左移1個元素。您可以在這裏將k值視爲1。

public class ArrayCircularShift { 

    public static void main(String[] args) { 
     int origArray[] = {3,2,1,4,5,6}; 

     // right shift by k 
     int k = 3; 
     int size = origArray.length; 
     k = k % size; 
     int rightShiftedArray[] = new int[size]; 

     //right shift 
     for(int i =0 ;i < size ; i++) 
     { 
       rightShiftedArray[(k + i) % size ] = origArray[i]; 
     } 

     System.out.println("right shifted array"); 
     for(int ele : rightShiftedArray) 
      System.out.println(ele); 

     //left shift by k 
     int[] leftShiftedArray = new int[size]; 

     for(int i=0; i < size ; i++) 
     { 
      int pos = i - k; 
      if(pos >= 0) 
       leftShiftedArray[pos] = origArray[i]; 
      else 
       leftShiftedArray[pos + size] = origArray[i]; 
     } 

     System.out.println("left shifted array"); 
     for(int ele : leftShiftedArray) 
      System.out.println(ele); 
    } 
} 
0

想到這個就像是將數組倒轉到某個點。假設我們有一個[5,1,2,3,8,9]的數組,並且您想將它旋轉到左邊第k次(在這種情況下,讓k是2)。所以得到的數組將是[2,3,8,9,5,1]。說讓我們通過扭轉整個陣列開始嘗試這一點,所以

public static void reverse(int startIndex, int stopIndex, int[] array){ 
     while(startIndex < stopIndex){ 
      int temp = array[startIndex]; 
      array[startIndex++] = array[stopIndex]; 
      array[stopIndex--] = temp; 
     } 
} 

public static int[] rotate(int[] array, int k){ 
    reverse(0, array.length - 1, array); 
    reverse(0, array.length - 1 - k, array); 
    reverse(array.length - k, array.length - 1, array); 
    return array; 
} 
  1. 扭轉了整個陣列,我們應該得到 [9,8,3,2,1,5]
  2. 現在我們看到子陣列在各自的位置,所以我們只需要將其逆轉爲 ,以便反轉[9,8,3,2]到[2,3,8,9]和反轉[1,5]到[5,1]
相關問題