0
我已經知道如何做到這一點與數組長度爲3,但我需要幫助做這與所有長度的數組。如何將數組中的所有元素左移?
public int[] rotateLeft3(int[] nums) {
int[] array = {nums[1], nums[2], nums[0]};
return array;
}
我已經知道如何做到這一點與數組長度爲3,但我需要幫助做這與所有長度的數組。如何將數組中的所有元素左移?
public int[] rotateLeft3(int[] nums) {
int[] array = {nums[1], nums[2], nums[0]};
return array;
}
這是循環左移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);
}
}
想到這個就像是將數組倒轉到某個點。假設我們有一個[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;
}
請參閱本http://stackoverflow.com/questions/7970857/java-shifting-elements-in-an-array和http://stackoverflow.com/questions/31834786/move-elements-n向左挑戰 –
[Java,在數組中移位元素]的可能副本(http://stackoverflow.com/questions/7970857/java-shifting-elements-in-an-array) – CozyAzure
你知道如何編寫一個循環?你需要一個。 – ajb