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
rotated to
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();
}
}
};
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();
}
}
};
相关文章推荐
- 算法导论——(4)有序统计树(OrderStatisticTree,以红黑树为基本数据结构)
- C语言编程判断一个数是否为素数
- BZOJ1048
- hdu 4300 Clairewd’s message
- Mysql之多实例my.cnf
- Javascript书籍推荐----(步步为赢)
- ASP.Net零碎
- Javascript书籍推荐----(步步为赢)
- ios线程-创建及通信
- Oracle Coherence中文教程二十三:使用连续查询缓存
- mysql安装 编码设置 远程访问
- HDU 5414 字符串
- linux信号处理
- 事件
- 正则表达式学习资料
- SGU 242(MaxFlow)
- nginx中的try_files指令解释
- “垃圾围城”怎么破? 盘点国外垃圾处理经验
- uva1584_水题(环状串的处理)
- HDU 5414 CRB and String(字符串处理)——多校练习10