189、轮转数组
法一:使用额外的数组,最后将新数组拷贝至原数组即可。
publicstaticvoid arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。
int n = nums.length;
System.arraycopy(newArr, 0, nums, 0, n);//将数组newArr从索引0开始复制nums.length长度给数组nums
法二:三次翻转
12345经过翻转就变成了54321,这样已经做到了把前面的数字放到后面去,但是还没有完全达到我们的要求,比如,我们只需要把12放在后面去,目标数组就是34512,与54321对比发现我们就只需要在把分界线前后数组再进行翻转一次就可得到目标数组了。所以此题只需要采取三次翻转的方式就可以得到目标数组,首先翻转分界线前后数组,再整体翻转一次即可。此题面试常考
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k %= n;
//1,2,3,4,5,6,7
reverse(nums, 0, n - 1);//先把整体翻转 ->7,6,5,4,3,2,1
reverse(nums, 0, k - 1);//翻转[0, k%n-1] ->5,6,7,4,3,2,1
reverse(nums, k, n - 1);//翻转[k%n, n-1] ->5,6,7,1,2,3,4
}
public void reverse(int[] nums, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
}
总结
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取。
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!
全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。