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].

Note: Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

实现

    void rotate(int nums[], int n, int k) {  
        int temp;  
        for (int step = 0; step < k; step++) {  
            temp = nums[n-1];  
            for (int i = n-1; i > 0; --i)  
            {  
                nums[i] = nums[i-1];  
            }  
            nums[0] = temp;  
        }  
    }  

上面这个实现容易理解,但是效率不高,会报超时的错误。下面这个实现效率有极大的提升:

    void rotate(int nums[], int n, int k) {  
        k = k % n;  
        if (k == 0) return;  
        int *temp = new int[n];  
        memcpy(temp, nums+(n-k), sizeof(int)*k);  
        memcpy(temp+k, nums, sizeof(int)*(n-k));  
        memcpy(nums, temp, sizeof(int)*n);  
        delete[] temp;  
    }  

 上面是C++的风格,C语言可以如下写法:

void rotate(int nums[], int n, int k) {
    k=k%n;
    if(k==0) return;
    int *temp,a[n];
    temp = a;
    memcpy(temp, nums+(n-k), sizeof(int)*k);
    memcpy(temp+k,nums, sizeof(int)*(n-k));
    memcpy(nums, temp, sizeof(int)*n);
}

 

posted @ 2015-03-17 16:11  hongchun_z  阅读(124)  评论(0编辑  收藏  举报