给定一个数组nums,将数组向右轮换k个位置,其中k为非负整数。
是什么?
数组轮换
怎么做?
其实就是前面的往后挪,挪到边界就提前
思考
七七看到题目想到的很简单,每次挪一个,然后k为多少就挪多少次,每次都用一个数组装着!好复杂啊!所以找灵宝优化了一下代码
代码
class Solution {
public void rotate(int[] nums, int k) {
//定义长度和数组
int n = nums.length;
int[] rotated = new int[n];
//数学逻辑:(i + k) % n 确保新索引合法,七七数学不好,已经准备当公式背了。。。。
for (int i = 0; i < n; i++) {
rotated[(i + k) % n] = nums[i];
}
//第二次看到这个东西了,原数组,原数组起始位置,新数组,新数组起始位置,长度,然后添加!!!
System.arraycopy(rotated, 0, nums, 0, n);
}
}
这道题目力扣定义为中等,其实七七觉得应该是简单题目吧!这里有一个数学方法,七七就不理解了,当公式背了,值得一提的是,这个数学直接就实现了翻转,技术直接偷掉啦!
