leetcode--Rotate Array

来源:互联网 发布:sql语句查询所有库存 编辑:程序博客网 时间:2024/06/09 05:07
/*
 * 需求:旋转数组

 * Rotate an array of n elements to the right by k steps.

 */


在自己的eclipse上写的代码很通过,但是在leetcode上怎么也刷不过。编译能过,但是输出的还是原来的数组,并没有旋转。

睡了一觉,才想到是这个原因。

是因为数组与数组之间的拷贝不能直接用"="号来赋值,nums只是引用,当nums=y;的时候,nums只是指向别的对象,原来的对象内容并没有改变。所以要改用

System.arraycopy()或者是Arrays.copyof()来拷贝数组。

当然这两者还是有区别的。具体请参考API。

贴代码:

/*<span style="font-size:18px;"> * 时间复杂度和空间复杂度都是O(N) * 开辟一个新数组区域 * 倒着找到要旋转的区域,输出, * 在正着找到没有旋转的地方,输出 */    public void rotate(int[] nums, int k) {        int reallyrotate=k%(nums.length);//循环,实际只旋转k%len次数                int start=nums.length-reallyrotate;        int end=nums.length-1;//确定待变换区域                if(start<=end){        int[] y=new int[nums.length];            int y_cur = 0;            //赋值旋转区域            for(int i=start;i<=end;i++){            y[i-nums.length+reallyrotate]=nums[i];//y[0]=num[i]            y_cur=i-nums.length+reallyrotate;            }            System.out.println("y_cur="+y_cur);            //赋值没有旋转区域            for(int j=0;j<=nums.length-reallyrotate-1;j++)            {            y[y_cur+1+j]=nums[j];            }                        System.arraycopy( y, 0, nums, 0, nums.length );//拷贝数组                        System.out.println(Arrays.toString(nums));        }            }</span>




0 0