轮转数组
问题描述:
给定一个整数数组
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]
//提交版
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里面,好像默认返回的是原数组,所以有粘贴这一步)