【Leetcode】Rotate Array

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



你可能感兴趣的:(【Leetcode】Rotate Array)