如何将数组中的所有元素移到左边?

时间:2017-01-23 03:27:59

标签: java arrays

我已经知道如何在数组长度为3的情况下执行此操作,但我需要使用所有长度的数组来帮助完成此操作。

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

2 个答案:

答案 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. 倒转整个阵列,我们应该得到 [9,8,3,2,1,5]
  2. 现在我们看到子阵列在各自的位置,所以我们只需要反转它 所以将[9,8,3,2]反转为[2,3,8,9]并将[1,5]反转为[5,1]

答案 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);
    }
}