关闭

Easy-题目65:189. Rotate Array

50人阅读 评论(0) 收藏 举报
分类:

题目原文:
Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
题目大意:
给一个数组,循环右移k位。
题目分析:
这题好像也是考研408复习资料里面出现过的一道题,(还是笔试原题?我忘了)。如果不给出答案我也是想不到的。用三步翻转实现:
(1) 先翻转前n-k位;
(2) 再翻转后k位;
(3) 再从头到尾翻转。
但本题中k有可能大于数组长度n,这种情况下相当于循环移动了n%k次(剩下的因为是整除的,相当于循环移动了n的整数倍,等于没移)
源码:(language:c)

void rotate(int* nums, int numsSize, int k) {
    if(k>=numsSize)
        k=k%numsSize;
    reverse(nums,numsSize-k);
    reverse(nums+numsSize-k,k);
    reverse(nums,numsSize);
}
void reverse(int* a,int n)
{       
    int i,t;
    for(i=0;i<n/2;i++) {
        t=*(a+i);
        *(a+i)=*(a+n-i-1);
        *(a+n-i-1)=t;
    }
}

成绩:
8ms,beats 9.23%,众数8ms,90.77%

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:56973次
    • 积分:3213
    • 等级:
    • 排名:第10664名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论