189. Rotate Array

Rotate an array of n elements to the rightby k steps.

For example, with n = 7 and k = 3, thearray [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

    翻译:一个数组经过k步实现转换

    分析:想了两种方法,第一循环右移三位、第二,先全部反转,再0到k反转,再k到length反转。第一种方法写出来了,调试都是对的,在leetcode没通过的例子也能跑,不知道为什么不行,方法二写出来了。具体代码如下:

    方法一:

public class Solution {

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

      /k=k%nums.length;

       int[] nums1=new int[nums.length];

              intlength=nums.length;

              for(inti=0;i<length;i++){

                     nums1[(i+k)%length]=nums[i];

              }

              nums=nums1;

    }

}

方法二:要注意两点,第一就是k的值应该与数组长度取余,第二就是在数组反转的时候也可以利用款速快速排序的思想,利用左右的两个指向进行交换。

public class Solution {

   public static void reverse(int nums[],int from,int end){

              if(from<end){

                     intlength=end-from;

                     for(inti=0;i<length/2;i++){

                            inttemp=nums[from+i];

                            nums[from+i]=nums[end-i-1];

                            nums[end-i-1]=temp;

                     }

              }

       }

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

            k=k%nums.length;

              Solution.reverse(nums,0,nums.length);

              Solution.reverse(nums,0,k);

              Solution.reverse(nums,k,nums.length);

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值