[Leetcode]Rotate Array java(三种)

首先注意题目是向右移

Method 1.申明额外空间 一直移位 进行旋转 代码就不给了会超时


Method 2. 交换 (不论是运用递归交换还是公约数进行移动交换)

这里用递归,主要是把要旋转的进行前后进行交换,不过会遇到前后数目不一样,所以交换完后需要递归下一次前后在进行交换直到交换的前后数目一样。

public void rotate(int[] nums, int k) {

		if (k >= nums.length)
			k = k % nums.length;
		if (k == 0 || nums.length == 0)
			return;

		int n = nums.length;
		int i = k;
		swap(nums, i, n - i, 0, n);

	}

	public void swap(int[] nums, int n, int i, int start, int end) {
		int temp = 0;
		if (n == i) {
			for (int j = 0; j < n; j++) {
				temp = nums[start + j];
				nums[start + j] = nums[end - i + j];
				nums[end - i + j] = temp;
			}
		} else if (n > i) {
			for (int j = 0; j < i; j++) {
				temp = nums[start + j];
				nums[start + j] = nums[end - i + j];
				nums[end - i + j] = temp;
			}
			swap(nums, n - i, i, start, end - i);
		} else if (i > n) {
			for (int j = 0; j < n; j++) {
				temp = nums[start + j];
				nums[start + j] = nums[end - n + j];
				nums[end - n + j] = temp;
			}
			swap(nums, n, i - n, start + n, end);
		}

	}



Method 3. 反转 可以自己举一个例子 先把要旋转的左右分别反转,再反转整个数组。

public void rotate(int[] nums, int k) {

	 if(k>=nums.length) k=k%nums.length;
	 if(k==0|| nums.length==0) return;
	reverse(nums, 0, nums.length-1-k);
	reverse(nums, nums.length-k, nums.length-1);
	reverse(nums, 0,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--;
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值