• 数组循环位移K位


    来自《编程珠玑》,将数组看成一个向量x=ab,那么循环右移后数组就变成ba。从向量的角度考虑
    (a-1b-1)-1=ba
     

    /* 不用临时变量交换a[begin]和a[end]两内存单元的内容 */
    void stringReverse(char a[], int begin, int end)
    {
        for(; begin < end; begin++, end--){
            a[begin] ^= a[end];
            a[end] ^= a[begin];
            a[begin] ^= a[end];
        }
    }

    void loopRightShift(char a[], int n, int k)
    {
        k %= n;
        
        stringReverse(a, 0, n-k-1); /* 先对a[0...n-k-1]这(n-k)个字符逆序 */
        stringReverse(a, n-k, n-1); /* 再对a[n-k...n-1]这k个字符逆序 */
        stringReverse(a, 0, n-1);   /* 最后对整个字符串逆序 */
    }

  • 相关阅读:
    使用JSON.NET实现对象属性的格式化的自定义
    AspNetCore项目-Service注入或覆盖
    发布Nuget
    收藏
    工具
    快捷键大全
    SqlServer分页查询语句
    面试相关
    Eratosthes algrithm 求素数
    code training
  • 原文地址:https://www.cnblogs.com/bendantuohai/p/4627500.html
Copyright © 2020-2023  润新知