循环导致数组旋转超时

嗨,交换技术(我的代码)如何遭受超时问题,其中作为圆形数组


{(i+number of rotation)%length} 执行不?


a是一个int[]。


for (int i = 0; i < numberofrotation; i++) {

    for (int j = 0; j < a.length-1; j++) {

        temp=a[j];

        a[j]=a[j+1];

        a[j+1]=temp;

    }

}

return a;


Helenr
浏览 186回答 1
1回答

函数式编程

(i +旋转数)%length&nbsp;将按旋转数前进并环绕以形成圆形阵列。使用模数转数减少到小于或等于数组的长度,因此执行速度更快给你一些想法...采用交换数组值的方法,如果将长度10的数组交换n次,其中n是10的倍数,则意味着n mod 10 = 0,结果是原始数组。如果n的值不是10的倍数,则您将看到数组值的数组顺序更改。您可以通过旋转n次获得结果,或者通过旋转n mod 10次可以获得相同的结果因此,如果n = 25,那么将数组交换25等于将数组交换5次25 mod 10 = 5类似地,如果n = 13,则将数组交换13次将得到与数组交换3次相同的结果13 mod 10 = 3即使转数为Integer.MAX_VALUE并且要旋转的数组的长度为100,也可以将转数减少为Integer.MAX_VALUE%100,即47。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java