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