Algorithm to rotate an array in linear time

后端 未结 22 2136
我寻月下人不归
我寻月下人不归 2020-11-28 05:05

How to rotate an integer array by i times using swap function only in linear time.

22条回答
  •  感动是毒
    2020-11-28 06:01

    public int[] shift(int[] A, int K) {
        int N = A.length;
        if (N == 0)
            return A;
        int mid =  -K % N;
        if (mid < 0)
            mid += N;
        if (mid == 0)
            return A;
    
        reverseSubArray(A, 0 , mid - 1);
    
        reverseSubArray(A, mid , N - 1);
    
        reverseSubArray(A, 0 , N - 1);
    
        return A;
    }
    
    private void reverseSubArray(int[] A, int start , int end){
        int i = 0;
        int tmp;
        while (i < (end - start + 1) / 2) {
            tmp = A[i + start];
            A[i + start] = A[end - i];
            A[end - i] = tmp;
            i++;
        }
    
    }
    

    Doug McIlroy’s Handwaving Description

提交回复
热议问题