Easy-题目65:189. Rotate Array

题目原文:
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%

阅读更多
版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs https://blog.csdn.net/cmershen/article/details/51541813
个人分类: Leetcode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Easy-题目65:189. Rotate Array

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭