【问题标题】:Java Integer Array Rotation (Left)Java 整数数组旋转(左)
【发布时间】:2018-10-08 17:05:00
【问题描述】:

我有一个简单的旋转函数,它需要一个数组和一个数字来旋转左边的数字

例如[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;
}

【问题讨论】:

  • 您能否展示您当前的解决方案以及您为什么认为它效率不高
  • 您不需要额外的collection 来执行此操作。您可以使用数组本身来做到这一点。
  • @NicholasK 可以解释一下吗?
  • 阅读Collections.rotate(List, int)的文档。将其应用于数组。
  • @aidan22 : 为什么不先将所有输入存储在数组中,然后将其向左移动?

标签: java arrays integer


【解决方案1】:

使用O(n) 复杂性的简单方法如下,同时处理有效的shifts int[] arr: 是一个int 数组,n=length 是一个数组,d=需要多少班次。

    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);

}

【讨论】:

    【解决方案2】:

    你为什么不试试这个

    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; 
        } 
    

    然后像下面这样调用这个调用方法

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

    【讨论】:

    • 这是一本书中的问题解决练习,试图只用两个参数来解决。
    • 我说这是一个练习,我只能使用这些参数,我正在为我的答案寻找更有效的解决方案,正如@NicholasK 所说,我没有也不能拒绝你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2019-12-10
    相关资源
    最近更新 更多