轮转数组
问题描述:
给定一个整数数组
nums
,将数组中的元素向右轮转k
个位置,其中k
是非负数。示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:
输入:nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100] 解释: 向右轮转 1 步: [99,-1,-100,3] 向右轮转 2 步: [3,99,-1,-100]
java
//提交版
class Solution {
public int[] rotate(int[] nums, int k){
int n = nums.length;
int[] newarry = new int[n];
for (int i =0;i <nums.length;i++){
newarry[(i+k)%n] = nums[i];
}
//将 nums 数组中的前 n 个元素从索引 0 开始复制到 newarry 数组中,从索引 0 开始粘贴
System.arraycopy(newarry,0,nums,0,n);
return nums;
}
}
//带有输入输出
import java.util.Arrays;
public class hot13_rotate {
public int[] rotate(int[] nums, int k){
int n = nums.length;
int[] newarry = new int[n];
for (int i =0;i <nums.length;i++){
newarry[(i+k)%n] = nums[i];
}
//将 nums 数组中的前 n 个元素从索引 0 开始复制到 newarry 数组中,从索引 0 开始粘贴
System.arraycopy(newarry,0,nums,0,n);
return nums;
}
public static void main(String[] args){
int[] nums = {1,2,3,4,5,6,7};
int k =3;
System.out.println("输入:nums = " + Arrays.toString(nums) + " k = " + k);
hot13_rotate hot13Rotate = new hot13_rotate();
int[] result = hot13Rotate.rotate(nums, k);
System.out.println("输出:nums = " + Arrays.toString(result));
}
}
知识点总结:
- System.arraycopy函数:将 nums 数组中的前 n 个元素从索引 0 开始复制到 newarry 数组中,从索引 0 开始粘贴(其实在本题中不用粘贴理论上也可以,返回新创建的那个数组就可以,但是在LeetCode里面,好像默认返回的是原数组,所以有粘贴这一步)