力扣L16--- 189.轮转数组-2024年3月18日

1.题目描述

在这里插入图片描述

2.知识点

注1:
System.arraycopy() 方法是Java中用于数组复制的一个静态方法。它允许将一个数组的部分或全部内容复制到另一个数组中的指定位置。其语法如下:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

参数说明:

src:源数组。
srcPos:源数组中要复制的起始位置。
dest:目标数组。
destPos:目标数组中要复制的起始位置。
length:要复制的元素个数。

int[] sourceArray = {1, 2, 3, 4, 5};
int[] destinationArray = new int[5];

// 将 sourceArray 中的元素从索引 1 开始的三个元素复制到 destinationArray 中索引 0 开始的位置
System.arraycopy(sourceArray, 1, destinationArray, 0, 3);

// 复制完成后 destinationArray 的内容为 {2, 3, 4, 0, 0}

注2:

Java 中,System.arraycopy() 是用于数组复制的标准方法,而不是 Object 类的方法。因此,Object 类没有 arraycopy() 方法。

System.arraycopy() 方法是静态方法,它可以在任何类中直接调用,无需创建对象。这个方法专门用于复制数组的内容,具有高效的底层实现,因此通常被用来执行数组的复制操作。

**注3:**步长k大于数组的长度的时候 说明走过某几个完整的循环
所以要用k=k%n

注4:因为 rotate 是一个数组,而不是一个对象,它没有 valueOf() 方法。如果你想返回旋转后的数组,应该直接返回 nums 数组即可。

3.具体思路和例子

在这里插入图片描述

4.代码实现

方法1:

class Solution {
    public void rotate(int[] nums, int k) {
        int n=nums.length;
        k=k%n;
        int[] rotate=new int[n];

        for(int i=0;i<k;i++)
        {
            rotate[i]=nums[n-k+i];
            //新rotate数组的索引在0,1...K,
            //旧nums数组后k个数
        }
        for(int i=k;i<n;i++)
        {
            rotate[i]=nums[i-k];
            //新rotate数组的索引在k....n;
            //旧nums数组前i-k个数
        }
        System.arraycopy(rotate,0,nums,0,n);


    }
}

方法2:

class Solution {
  public void rotate(int[] nums, int k) {
  
        int n=nums.length;
        k=k%n;
        int[] rotate=new int[n];

       // for(int i=0;i<k;i++)
      //  {
      //      rotate[i]=nums[n-k+i];
            //新rotate数组的索引在0,1...K,
      //  }
        // for(int i=k;i<n;i++)
       // {
         //   rotate[i]=nums[i-k];
            //新rotate数组的索引在k....n;
      //  }


      //将nums数组的后k个元素拷贝到rotates数组的前k个索引
      System.arraycopy(nums,n-k,rotate,0,k);
      // 拷贝旋转后的前 n - k 个元素到 rotated 数组的末尾
      System.arraycopy(nums,0,rotate ,k,n-k);

      System.arraycopy(rotate, 0,nums,0,n);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值