每日一题轮转数组
题目:
给定一个 数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数,
例如:
输入: 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]
解题(Java): class Solution { public void rotate(int[] nums, int k) { int length = nums.length; int[] newArr = new int[length]; for (int i = 0; i < length; ++i) { //思路:新的位置就是当前位置加上轮转次数然后对数组长度的取模 //比如 数组长度为10,轮转次数为5,当前第二个元素所在位置就是 (1 + 5)%10 = 6,也就是第二个元素会出现到第7个位置 newArr[(i + k) % length] = nums[i]; } //遍历赋值原数组 for(int i = 0; i < newArr.length ;i++){ nums[i] = newArr[i]; } } }
思路解析:
主要就是找到数组中数字新的位置,因为轮转次数有可能会超过数组本身长度,所以需要取模来确定最新的位置,这个题目比较简单。