Java整数数组旋转(左)

时间:2018-10-08 17:05:01

标签: java arrays integer

我有一个简单的旋转功能,该功能需要一个数组和一个数字才能将数字向左旋转

例如[1,2,3,4,5] & 2-输出:[3,4,5,1,2]

我想知道完成此功能的最有效方法,无论是将int数组转换为字符串并对其进行拼接,还是复制该数组还是将其转换为List<Integer>

如果有人需要其他信息,请询问!

我目前的解决方案:

static int[] rotLeft(int[] a, int d) {
    int lengthOfArray = a.length;
    int[] temp = new int[lengthOfArray];
    for(int i = 0; i < lengthOfArray; i++){
        int newLocation = (i + (lengthOfArray - d)) % lengthOfArray;
        temp[newLocation] = a[i];
    }
    return temp;
}

2 个答案:

答案 0 :(得分:1)

具有O(n)复杂度的简单方法如下,对有效shifts int[] arr:的处理是一个int数组,一个数组n=length,d =需要多少移位。 / p>

    public int[] leftRotate(int[] arr, int n, int d) {

    int rot = 0;
    int[] marr = new int[n];
    if (d < 0 || d == 0 || d>n) {
        return arr;
    }

    else {
        for (int i = 0; i < n; i++) {

            if (i < n - d) {
                marr[i] = arr[i + d];
            } else {
                marr[i] = arr[rot];
                rot++;
            }

        }

        return marr;
    }

}

    public void GetArray(int[] arr, int n, int d) {

    int[] arr1 = leftRotate(arr, n, d);
    for (int j : arr1) {
        System.out.println(j);
    }
}

    public static void main(String args[]) {

    int[] arr = { 1,2,3,4,5 };
    int n = arr.length;

    Test2 obj = new Test2();
    obj.GetArray(arr, n, 2);

}

答案 1 :(得分:-1)

你为什么不尝试这个

void Rotate(int arr[], int d, int n) 
    { 
        for (int i = 0; i < d; i++) 
            leftRotatebyOne(arr, n); 
    } 

    void leftRotatebyOne(int arr[], int n) 
    { 
        int i, temp; 
        temp = arr[0]; 
        for (i = 0; i < n - 1; i++) 
            arr[i] = arr[i + 1]; 
        arr[i] = temp; 
    } 

并按如下所示调用此invoke方法

int arr[] = { 1, 2, 3, 4, 5 }; 
Rotate(arr, 2, 5);