码迷,mamicode.com
首页 > 其他好文 > 详细

Rotate array

时间:2015-03-17 17:32:13      阅读:139      评论:0      收藏: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].

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);
}

 

Rotate array

标签:

原文地址:http://www.cnblogs.com/zhhc/p/4344682.html

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