189. 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].

这是一道求数组旋转的问题,题目求的是一个一维数组向右旋转k个位置的结果,即第0位元素移到第k位,第1位元素移到第k+1位,这里另外用了一个新的数组a,代码如下:

        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];  
        }  

另外,数组的旋转可以看作是从数组的末尾取k个元素放在数组开头,这种解法暂时还没想到怎么写代码,明天再写==吧

=========================================分割线=======================================================

自己后来写了下面这种最笨的方法,结果应该是对的,但是空间复杂度太大,导致没有通过。

                int len = nums.length;
		List<Integer> list1 = new ArrayList<Integer>();
		List<Integer> list2 = new ArrayList<Integer>();
		for(int i=k+1;i<len;i++){
			list1.add(nums[i]);
			
		}
		for(int j=0;j<k+1;j++){
			list2.add(nums[j]);
		}
		list1.addAll(list2);
		//System.out.println(list1);
		list1.toArray();
		for(int t=0;t<len;t++){
			nums[t]=list1.get(t);
		}
于是,参考了大神的写法:

int len = nums.length;
		int k1=k%len;
	    int [] nums1 = new int [k1];
		for(int i=0;i<k1;i++){
			nums1[i]=nums[len-k1+i];
		}
		for(int j=len-k1-1;j>=0;j--){
			nums[j+k1]=nums[j];
		}
		for(int i=0;i<k1;i++){
			nums[i]=nums1[i];
		}

这种算法的思想是新建一个数组nums1,保存要放在开头的k1个元素,然后取出nums中的前len-k1个元素,这时候要先取下标为len-k1-1的元素放在末尾,再取下标为len-k1-2的元素...以为如果取得时候下标按照0-(len-k1-1)的方法,会导致有的元素覆盖。

每天进步一点点吧,嗯...跟随大神的脚步......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值