嵌套循环的优化
金蝶的面试题
现有代码
for( int i=0;i<1000;i++){
for(int j=0;j<100;j++){
for(int k=0;k<10;k++){
function(i,j,k);
}
}
}
有没有办法优化下,
我写的是把循环次数少的层放到外边,好像没意义呀
[解决办法]
int a = 0, b = 0, c = 0;
for (int i = 1000; i > 0; i--, a++) {
for (int j = 100; j > 0; j--, b++) {
for (int k = 10; k > 0; k--, c++) {
function(a, b, c);
}
}
}
减运算是不是比加要快?
[解决办法]
通过函数的嵌套调用来解循环的嵌套。
public void f3(){ for (int i = 0; i<1000; i++){ f2(i); } } public void f2(int i){ for (int j = 0; j<100; j++){ f1(j); } } public void f1(int j){ for (int k = 0; k<10; k++){ function(i,j,k); } }
[解决办法]
把循环次数最多的放在循环的最内层
效率会相应提高的
for( int k=0;i <10;k++){
for(int j=0;j <100;j++){
for(int i=0;i <1000;i++){
function(i,j,k);
}
}
}
这样的话
结果不会受到什么影响的
但是效率会相应的提高