【Leetcode】Rotate Array

来源:互联网 发布:linux漏洞公布 编辑:程序博客网 时间:2024/06/08 02:51

题目链接: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;}



0 0
原创粉丝点击