如何将数组元素移位n次?

时间:2016-12-07 03:50:57

标签: java arrays

我有一个数组,我想用n-indexes移动数组元素。为了简化问题,我想说,我想转移1-index然后,我可以写一个whilerecursion来使它成为n-times

说,数组是A = [3, 8, 9, 7, 6],我希望right shift 1-index使其成为A = [6, 3, 8, 9, 7]

我想到一个HashMap将采用索引,并将转换为n个索引。说,

Map<Integer, Integer> map = new HashMap<>();
int n = 2;

for(int j =0; j < arr.length; j++){
     if(j+2 > arr.length -1){
         map.put(j+2 - arr.length, arr[j]);
     }
     map.put(j+2, arr[j]);
}

for(Map.Entry<Integer, Integer> map : amp.entrySet()){
     arr[map.getKey()] = map.getValue();
}

解决方案对我来说感觉不太好。怎么写算法呢?

3 个答案:

答案 0 :(得分:1)

std::istringstream

答案 1 :(得分:0)

您可以使用下面的简单方法,它将采用数组和移位数作为输入。我已添加内联注释来描述每个步骤。

    static String[] shiftArray(String[] inputArray, int shifts) {

    // Loop the number of shifts 
    for (int x = 0; x < shifts; x++) {

        //Last element will be store in temporary variable 
        String lastElm = inputArray[inputArray.length - 1];

        //This loop will shift array content by one
        for (int i = inputArray.length; i > 0; i--) {
            if (i == 1) {
                inputArray[0] = lastElm;
            } else {
                inputArray[i - 1] = inputArray[i - 2];

            }
        }
    }

    return inputArray;
   }

答案 2 :(得分:0)

我在这里提供了两个解决方案,其中第一个是从论坛中收集的。

/*solution-a*/
    public static int swap(int itself , int dummy){
        return itself;
    }

    public static void reverse(int[] A, int start, int end){

        int i = start, j = end;

        while(i < j){

            A[i] = swap(A[j], A[j] = A[i]);

            i++;
            j--;
        }
    }

    public int[] solution(int[] A, int K) {

        if(K > A.length){
            return null;
        }

        reverse(A, 0, A.length -1);
        reverse(A, 0, K-1);
        reverse(A, K, A.length -1);

        return A;
    }
    /*ENd of solution-a*/






    /*ENd of solution-b*/
    public static int[] solution1(int[] arr, int n){

        Map<Integer, Integer> map = new HashMap<>();

        for(int j =0; j < arr.length; j++){

            if(j+n > arr.length -1){

                map.put(j+n - arr.length, arr[j]);
                continue;
            }

            map.put(j+n, arr[j]);
        }

        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            arr[entry.getKey()] = entry.getValue();
        }

        return arr;
    }
    /*ENd of solution-b*/