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

OJ练习36——T189 Rotate Array

时间:2015-04-29 16:38:20      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

把数组做给定次数的rotate操作。

rotate一次:即把末尾的元素放到开头,将其他的元素循环右移一个单位。

【思路】

1.再开个空间,将末尾的k个元素按从前到后的顺序放在新数组的开头,再将原数组剩下的元素按从前到后的顺序赋给新数组剩下的空间。

节省了时间复杂度,增加了空间复杂度。

2.顺向思维,每次处理一次rotate,将最后的元素冒泡到开头。时间复杂度太高。

3.用交换代替rotate,将数组以K分为两半,前半段做翻转,后半段做翻转,最后整体做翻转,时间复杂度和空间复杂度均为最低。

【my code】

void rotate(int nums[], int n, int k) {
        int k1=k%n;
        reverse(nums, 0, n-k1-1);
        reverse(nums, n-k1, n-1);
        reverse(nums, 0, n-1);
    }
    void reverse(int nums[], int l, int h){
        //交换代替翻转
        int temp;
        int mid=(l+h)/2;
        for(int i=l; i<=mid; i++){
            temp=nums[i];
            nums[i]=nums[h-i+l];
            nums[h-i+l]=temp;
        }
    }

【后记】

耗时27ms,排名靠前。

所以说,以前学到的算法还是有用的,不经意就会想起来。

OJ练习36——T189 Rotate Array

标签:

原文地址:http://www.cnblogs.com/ketchups-notes/p/4466116.html

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