您的位置:首页 > 其它

Rotate Array [LeetCode]

2015-08-20 20:14 357 查看
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

class Solution {

public:

    void rotate(vector<int>& nums, int k) {

//第一种方法,时间代价很大       

//   k = k % nums.size();//k可能很大

//  int temp;

//  for(int i = 0; i < k; i++)//移位k次

//  {

//      temp = nums[nums.size()-1];

//      for(int j = nums.size()-1; j > 0 ; j--)

//      {

//         nums[j] = nums[j-1];

//     }

//     nums[0] = temp;

//  }

//第二种方法,拷贝内存方式[转载]     

//int n = nums.size();

//if (k == 0) return;  

//int *temp = new int
;  

//memcpy(temp, nums+(n-k-1), sizeof(int)*k);  

//memcpy(temp+k, nums, sizeof(int)*(n-k));  

//memcpy(nums, temp, sizeof(int)*n);  

//delete[] temp;  

//第三种方法,将后面k个数据保存在队列中

int n = nums.size();

if(n==0)return;

k=k%n;//当k大于n的时候,n次循环会回到初始位置,因此,可以省略若干次

if (k == 0) 
return;  

queue<int> s;//为了一步到位的展开移动,申请k个额外空间用于保存被移出去的元素,//需要额外空间O(k%n)

for(int i=0;i<k;++i)

{
s.push(nums[n-k+i]);

}

for(int j=n-k-1;j>=0;--j)
nums[j+k]=nums[j];//移动

for(int i=0;i<k;++i)

{
nums[i] = s.front();
s.pop();

}

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: