我已经知道如何在数组长度为3的情况下执行此操作,但我需要使用所有长度的数组来帮助完成此操作。
public int[] rotateLeft3(int[] nums) {
int[] array = {nums[1], nums[2], nums[0]};
return array;
}
答案 0 :(得分: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 :(得分: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);
}
}