码迷,mamicode.com
首页 > 编程语言 > 详细

【编程之美】2.17 数组循环位移

时间:2014-11-13 00:15:07      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   sp   for   strong   div   

题目:一个有N个元素的数组 循环右移k位 要求时间复杂度O(N)  只允许两个附加变量

abcd1234 循环右移4位  变成 1234abcd

 

做过 思路  (ATBT)T = BA

注意,K可能比N大,K也可能是负数(左移),要注意取余处理!!

#include <stdio.h>
#include <string.h>


void exchange(char * c, int begin, int end)
{
    char tmp;
    for(; begin < end; begin++, end--)
    {
        tmp = c[begin];
        c[begin] = c[end];
        c[end] = tmp;
    }
}

int mod(int r, int c)
{
    if(r >= 0)
    {
        return r % c;
    }
    else
    {
        return c + r % c; //这里 r%c 可以得到一个绝对值小于c的负数 再加上c 得到正数
    }
}
void rightRotate(char * c, int clen, int k)
{
    printf("%s\n", c);
    k = mod(k, clen);  //注意这里 防止k是负数 或k大于clen !!!!!! 考虑全面很重要
    exchange(c, 0, clen - k - 1);
    exchange(c, clen - k, clen - 1);
    exchange(c, 0, clen - 1);
    printf("%s\n", c);
}

int main()
{
    char c[20] = "hello, every one!" ;
    rightRotate(c, strlen(c), -6);

    return 0;
}

 

【编程之美】2.17 数组循环位移

标签:style   blog   io   color   ar   sp   for   strong   div   

原文地址:http://www.cnblogs.com/dplearning/p/4093772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!