LeetCode189:Rotate Array
2015-07-06 11:39
459 查看
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.
旋转数组
交换1234为4321
交换567为765
交换4321765为5671234
将操作分成三步即可:
时间复杂度是O(N),空间复杂度是O(1)
时间复杂度是O(n),空间复杂度是O(N)。
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.
旋转数组
解法一:
使用交换数据的方式,对于上面n=7,k=3的情况,可以分成三步完成:交换1234为4321
交换567为765
交换4321765为5671234
将操作分成三步即可:
时间复杂度是O(N),空间复杂度是O(1)
class Solution { public: //解法1:使用交换 void rotate(vector<int>& nums, int k) { int length=nums.size(); k=k%length; swapVector(nums,0,length-k-1); swapVector(nums,length-k,length-1); swapVector(nums,0,length-1); } void swapVector(vector<int> &nums,int first,int last) { for(int i=first,j=last;i<j;i++,j--) { swap(nums[i],nums[j]); } } };
解法二:
直接使用一个新的数组来保存数据,再将新的数组复制给给定数组。时间复杂度是O(n),空间复杂度是O(N)。
class Solution { public: //直接使用一块新的内存 void rotate(vector<int>& nums, int k) { vector<int> result; int length=nums.size(); k%=length; result.insert(result.end(),nums.begin()+length-k,nums.end()); result.insert(result.end(),nums.begin(),nums.begin()+length-k); nums=result; } };
相关文章推荐
- ScrollView中添加ListView
- 无法找到脚本*.VBS的脚本引擎解决办法
- gulp some tips
- Spring学习(5)---Bean的定义及作用域的注解实现
- map 后 PE 蓝屏原因专题讨论(e820cycles参数)
- 利用C#的指针编写都一个简单链表
- 晒下自己App广告平台积分墙收入,顺便点评几个广告平台
- Android连接服务器数据库查询+Gson解析(List和Map)格式json数据(二)
- 算法基础:整数排序问题(连续整数只保留首尾两个数字)
- 【LeetCode】Search for a Range
- Java处理音频波形相关
- Android关闭自定义相机拍照声音
- 关闭阿里旺旺后台服务
- 使用MetaPost绘制流程图
- iOS APP 发布上架流程
- STM32之系统重启
- windows下如何查看端口占用的程序
- 最后一天
- 纯代码跳转到xib界面以及storyboard界面
- SQL -- 是否或推断线相交以在其内部的平面