大家好,我是银包金。今天分享的题目是LeetCode热题100中的题目 轮转数组,分享解题思路。
先看题目:
方法一:使用额外的数组
这里其实很容易知道数组元素中轮转后的下标,可以由当前下标index加上 k%nums.length。
直接建立一个新数组,根据下标拷贝过去,这里就不做演示了。
方法二:原地旋转
这个方法可谓是魔法!
让我们看一下灵神是怎么讲的:
从这个图可以清晰的看懂。
代码如下:
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k %= n;
reverse(nums,0,n-1);
reverse(nums,0,k-1);
reverse(nums,k,n-1);
}
private void reverse(int[] nums,int i,int j){
while(i<j){
int temp = nums[i];
nums[i++] = nums[j];
nums[j--] = temp;
}
}
}