• 数组旋转


    问题:

    返回将一维数组向右旋转K个位置的结果。比如,一维数组{1,2,3,4,5},k=2时,返回结果是{4,5,1,2,3}。要求常数级空间复杂度,允许修改原有数组

    看到一个比较巧妙的方法,将数组反转三次,第一次反转整个数组,第二次反转数组的前K个数,第三次反转数组剩下的数。

    每次反转的时间为O(N)。

    例如,

    一维数组{1,2,3,4,5},k=2

    第一次反转:5,4,3,2,1

    第二次反转:4,5,3,2,1

    第三次反转:4,5,1,2,3 即为最终结果

    代码入下:

    int[] rotateK(int[] A,int k){
        if(A==null || k>=A.length) return A;  
        reverse(A,0,A.length-1); //反转整个数组
         reverse(A,0,A.length-1); //反转前K个数
         reverse(A,0,A.length-1); //反转剩下的数
        return A;
    }
    
    void reverse(int[] A,int start,int end){
        while(start<end){
         int temp = A[start];  
         A[start] = A[end];
         A[start] = temp;
         start++;
         end--;  
    }
    
    }
  • 相关阅读:
    备库归档重新传命令
    DG 参数详解
    ACTIVATE STANDBY
    Matplotlib模块:绘图和可视化
    Django总结一
    Django之用户认证—auth模块
    最长上升子序列
    Pandas模块:表计算与数据分析
    Django ORM操作

  • 原文地址:https://www.cnblogs.com/ChanSS/p/6600968.html
Copyright © 2020-2023  润新知