码迷,mamicode.com
首页 > 编程语言 > 详细

数组旋转

时间:2017-03-22 17:50:55      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:修改   复杂   art   bsp   ++   turn   oid   logs   eve   

问题:

返回将一维数组向右旋转K个位置的结果。比如,一维数组{1,2,3,4,5},k=2时,返回结果是{4,5,1,2,3}。要求常数级空间复杂度,允许修改原有数组

看到一个比较巧妙的方法,将数组反转三次,第一次反转整个数组,第二次反转数组的前K个数,第三次反转数组剩下的数。

每次反转的时间为O(N)。

例如,

一维数组{1,2,3,4,5},k=2

第一次反转:5,4,3,2,1

第二次反转:4,5,3,2,1

第三次反转:4,5,1,2,3 即为最终结果

代码入下:

int[] rotateK(int[] A,int k){
    if(A==null || k>=A.length) return A;  
    reverse(A,0,A.length-1); //反转整个数组
     reverse(A,0,A.length-1); //反转前K个数
     reverse(A,0,A.length-1); //反转剩下的数
    return A;
}

void reverse(int[] A,int start,int end){
    while(start<end){
     int temp = A[start];  
     A[start] = A[end];
     A[start] = temp;
     start++;
     end--;  
}

}

 

数组旋转

标签:修改   复杂   art   bsp   ++   turn   oid   logs   eve   

原文地址:http://www.cnblogs.com/ChanSS/p/6600968.html

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