您的位置:首页 > 其它

【Leetcode】Rotate Array

2015-12-06 23:06 411 查看
题目链接: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
[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.

Hint:

Could you do it in-place with O(1) extra space?

思路:

1、用另一个数组保存,空间复杂度为O(n),时间复杂度为O(n)

2、两边逆序,整个数组逆序。空间复杂度O(1),时间复杂度O(n)

3、数组平移,往右移动一个将覆盖的元素赋给最左开始的元素。空间复杂度为O(1),时间复杂度为O(n)

算法1:

public void rotate(int[] nums, int k) {
if (k > nums.length) {
k = k % nums.length;
}
int tmp[] = (int[]) nums.clone();
for (int i = 0; i < k; i++) {
nums[i] = tmp[tmp.length - k + i];
}
for (int i = 0; i < (tmp.length - k); i++) {
nums[k + i] = tmp[i];
}
}


算法2:

public void rotate(int[] nums, int k) {
k = k % nums.length;
nums = reverse(nums, 0,  nums.length-k-1);
nums = reverse(nums,  nums.length-k,nums.length-1);
nums = reverse(nums, 0, nums.length-1);
}

public  int [] reverse(int[] arr, int left, int right){
if(arr == null || arr.length == 1)
return arr;
for(int i=0;i<(right-left+1)/2;i++){
int tmp = arr[left+i];
arr[left+i] = arr[right-i];
arr[right-i] = tmp;
}
return arr;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: