java-仅使用单个1D数组即可将数组循环左移n个位置的有效方法.
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-仅使用单个1D数组即可将数组循环左移n个位置的有效方法.,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含840字,纯文字阅读大概需要2分钟。
内容图文
![java-仅使用单个1D数组即可将数组循环左移n个位置的有效方法.](/upload/InfoBanner/zyjiaocheng/668/9c2716cf8ec042fe8795cd4c5281ceb3.jpg)
给定n个整数和一个数字d的数组,请对该数组执行左旋转.给定数组[1,2,3,4,5]的示例,并且移位将始终< =数组的大小,并要求移位1,然后输出将为->. [2,3,4,5,1].我编写了下面的代码,由于我的时间复杂度为O(n ^ 2),可以很好地进行优化吗? 码: 公共静态int [] arrayLeftRotation(int [] a,int n,int k){
if (n == 1 || n == k)
return a;
else {
int track = 0;
while (track < k) {
int start = a[0];
for (int i = 0; i < n - 1; i++) {
a[i] = a[i + 1];
}
a[n - 1] = start;
track++;
}
return a;
}
}
解决方法:
有一个巧妙的技巧可以在O(n)时间内就地执行此操作:
>反转整个数组(即在索引0(包含0)和n(不含)之间`;
>反转索引0(含)和(n-k)(不含)之间的数组部分
>反转索引(n-k)(含)和n(不含)之间的数组部分
(这假定0≤k≤n;如果不是这种情况,只需找到与根据上述方法产生等效旋转的值不同的k值,例如k = k%n(如果k> ; = 0)
每个冲销操作均为O(n),其中有3个,因此总体上仍为O(n).同样,就地反转阵列也很容易,因此没有额外的内存开销.
内容总结
以上是互联网集市为您收集整理的java-仅使用单个1D数组即可将数组循环左移n个位置的有效方法.全部内容,希望文章能够帮你解决java-仅使用单个1D数组即可将数组循环左移n个位置的有效方法.所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。