题目
题解一:开辟数组 取模运算寻找位置(i+k)mod n =新位置
思路:通过,开辟数组 取模运算寻找新位置------位置(i+k)mod n =新位置
int[] newNums = new int[nums.length];
for(int i = 0;i<nums.length;i++){
newNums[(i+k)%nums.length] = nums[i];
}
for(int i = 0;i<nums.length;i++){
nums[i] = newNums[i];
}
题解二:数组翻转
思路:
1、先全部翻转
2、在根据k 的值 对k-1 的两边区域进行翻转
3、注意 k如果> 数组长度 就会出现下标越界,所以需要开始就k对数组长度取模 k %=n文章来源:https://www.toymoban.com/news/detail-674221.html
文章来源地址https://www.toymoban.com/news/detail-674221.html
// 方法二 数组翻转
// k = 3 n=7 1 2 3 4 | 5 6 7
// 7 6 5 | 4 3 2 1(全部翻转)
// 5 6 7 | 1 2 3 4(以k-1为界分开翻转)
int length = nums.length;
k %= length;//这一步很关键,如果k>lenght 会出现数组下标越界问题,所以需要取模
revese(0,length-1,nums);
revese(0,k-1,nums);
revese(k,length-1,nums);
}
public void revese(int begin,int end,int[] nums) {
while(begin < end){
int temp = nums[begin] ;
nums[begin] = nums[end];
nums[end] = temp;
begin ++;
end --;
}
到了这里,关于【LeetCode-中等题】189. 轮转数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!