LeetCode 189. Rotate Array(旋转数组)
2016-05-04 01:22
561 查看
原题网址:https://leetcode.com/problems/rotate-array/
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.
[show hint]
Related problem: Reverse Words in a String II
方法一:使用临时空间。
方法二:逐个向前推移,直到所有元素都在目标位置。
方法三:翻转。
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.
[show hint]
Related problem: Reverse Words in a String II
方法一:使用临时空间。
public class Solution { public void rotate(int[] nums, int k) { k = k % nums.length; if (k == 0) return; int[] buf = new int[k]; for(int i=0; i<k; i++) buf[i] = nums[nums.length-k+i]; for(int i=nums.length-1; i>=k; i--) nums[i] = nums[i-k]; for(int i=0; i<k; i++) nums[i] = buf[i]; } }
方法二:逐个向前推移,直到所有元素都在目标位置。
public class Solution { private int gcd(int a, int b) { if (a < b) { int t = a; a = b; b = t; } while (b > 0) { int t = a % b; a = b; b = t; } return a; } public void rotate(int[] nums, int k) { k = k % nums.length; int g = gcd(nums.length, k); int l = nums.length * k / g; for(int i=0; i<g; i++) { int last = nums[(i+k)%nums.length]; for(int j=0; j<l; j+=k) { int next = nums[(i+j+k)%nums.length]; nums[(i+j+k)%nums.length] = last; last = next; } nums[(i+k)%nums.length] = last; } } }
方法三:翻转。
public class Solution { private void reverse(int[] nums, int from, int to) { while (from < to) { nums[from] ^= nums[to]; nums[to] ^= nums[from]; nums[from] ^= nums[to]; from ++; to --; } } public void rotate(int[] nums, int k) { k = k % nums.length; reverse(nums, 0, nums.length-k-1); reverse(nums, nums.length-k, nums.length-1); reverse(nums, 0, nums.length-1); } }
相关文章推荐
- ES6新特性:let和const的使用
- Systemverilog的一个牛人总结
- 【C#进阶系列】25 线程基础
- ROS玩AR.drone(-2-)
- 何谓domReady
- 关系数据模型和范式
- 网站开发感性认识(学习思路)
- 字符串操作函数模拟实现大全
- SSH(一)~——Struts实现简单登录(附源码)
- 工厂模式(Factory)
- kaggle实例学习-Titanic(1)
- 在华为海思HI3518上移植和运行QT4.8.6 undefined reference to accept4
- spring4.1.1 jar包说明
- 漫威史上最黑暗 美国队长3英雄内战导火索 雷神索尔去哪了?
- 关于本人树莓派捣鼓过程中的一些记录
- sysctl
- DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command
- Android OpenGL10 纹理 <4>
- lightoj1282 - Leading and Trailing(水题)
- SpringMVC Controller介绍