LeetCode:Rotate Array
2015-10-27 00:25
309 查看
问题描述:
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
思路:
方法一:使用O(K)个空间,复杂度为O(n),将后半段保存在数组中,然后将前半段后移,切记:是倒着移动!
方法二:使用O(N)个空间,复杂度为O(n),将前后半段分别存储,代码略。
代码:
问题描述:
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.
思路:
方法一:使用O(K)个空间,复杂度为O(n),将后半段保存在数组中,然后将前半段后移,切记:是倒着移动!
方法二:使用O(N)个空间,复杂度为O(n),将前后半段分别存储,代码略。
代码:
public: void rotate(vector<int>& nums, int k) { int n = nums.size(); if(k == 0) { return; } else if(k > 0) { k = k % n; int array[k]; for(int i = n - k,j = 0; i < n; ++ i,++ j) array[j] = nums[i]; for(int i = n - k -1,j = n - 1; i >= 0; --i,--j) nums[j] = nums[i]; for(int i = 0,j = 0; i < k; ++i,++j) nums[i] = array[j]; } else { k = k % n ; k = n + k; int array[k]; for(int i = n - k,j = 0; i < n; ++ i,++ j) array[j] = nums[i]; for(int i = n - k -1,j = n - 1; i >= 0; --i,--j) nums[j] = nums[i]; for(int i = 0,j = 0; i < k; ++i,++j) nums[i] = array[j]; } } };</span>
相关文章推荐
- switch跳转表分析
- C socket TCP/UDP client/server example codes
- 文件加密程序
- Effective Objective-C 2.0 第11条:理解objc_msgSend的作用
- 解决MAC ssh本地断开后启动的服务会停止的问题
- Java实验五
- 读取网页内容保存到文件
- 通知——Notification
- Heap:Sunscreen(POJ 3614)
- c++中const用法大全与实质剖析
- 2015 长春、沈阳区域赛总结
- 2012福建省信息学奥林匹克CCF NOIP夏令营第三天训练
- UESTC OJ1221(DFS)
- EditText的使用方法详解
- IOS程序启动原理
- timer使用思考
- WM_PAINT与WM_ERASEBKGND补充
- keepalived实现nginx的高可用(双主模型)
- Android读书笔记------View动画(2)
- 冒泡排序