Rotate Array数组旋转
2016-08-17 21:37
183 查看
189. Rotate Array
返回将一维数组向右旋转k个位置的结果
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]
如果允许额外分配线性空间,那么可以错位复制原有数组的元素。如果允许修改原有数组,那么可以通过三次反转
数组来实现收旋转,不需要申请额外空间,并且每次反转时间为O(n),
三次反转数组:第一次反转整个数组;第二次反转数组的前K个数;第三次反转数组剩下的数
例如:
一维数组[1,2,3,4,5,6,7],k=3
第一次反转:7,6,5,4,3,2,1
第二次反转:5,6,7,4,3,2,1
第三次反转:5,6,7,1,2,3,4 最终结果
public class Solution { public void rotate(int[] nums, int k) { k %= nums.length;//k值超过数组长度时 reverse(nums, 0, nums.length-1);//翻转整个数组 <span style="white-space:pre"> </span> reverse(nums, 0, k-1);//翻转前k个数 <span style="white-space:pre"> </span> reverse(nums, k, nums.length-1);//翻转剩下的数 } public void reverse(int[] nums, int start, int end) { while (start < end) { int temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; start++; end--; } } }
或者创建新的数组
public void rotate(int[] nums, int k) { int[] a = new int[nums.length]; for (int i = 0; i < nums.length; i++) { a[(i + k) % nums.length] = nums[i]; } for (int i = 0; i < nums.length; i++) { nums[i] = a[i]; } }
相关文章推荐
- leetcode Rotate Array 旋转数组
- [LeetCode] Rotate Array 旋转数组
- leetcode-189 Rotate Array 旋转数组
- 面试_java:数组:旋转数组:rotate array(189)
- [LeetCode]12. Rotate Array旋转数组
- leetcode_189. Rotate Array 原地旋转数组
- 189. Rotate Array (旋转数组)
- 【LeetCode】Rotate Array 旋转数组
- rotate array 旋转数组
- LeetCode Rotate Array(数组的旋转)
- LeetCode Rotate Array 旋转数组
- 【LeetCode-面试算法经典-Java实现】【189-Rotate Array(旋转数组)】
- 189. Rotate Array 旋转数组
- LeetCode 189. Rotate Array (旋转数组)
- Rotate Array 数组的旋转
- LeetCode 189. Rotate Array(旋转数组)
- [LeetCode] 189. Rotate Array 旋转数组
- 189. Rotate Array 旋转数组
- [C++]Rotate Array 旋转数组
- leetcode 189. Rotate Array-旋转数组