我希望改进此代码:
for (int i = 0; i < a.length(); i++) {
for (int j = 0; j < b.length(); j++) {
if (arrayA[i] == arrayB[j]) {
arrayA[i] = ' ';
arrayB[j] = ' ';
}
}
}
昂贵的操作是
arrayA[i] = ' ';
arrayB[j] = ' ';
如果我发表评论,那么代码的运行时间为180ms到12ms ......
需要类似的东西,所以我可以计算空数组。
答案 0 :(得分:2)
只要满足if
条件,就可以通过突破内循环来改善这一点。您还可以使用外部循环中的临时变量来提高性能,以避免在内部循环中不断地进行arrayA
的下标:
for (int i = 0; i < a.length(); i++) {
char ch = arrayA[i];
for (int j = 0; j < b.length(); j++) {
if (ch == arrayB[j]) {
ch = ' ' = arrayB[j] = ' ';
break;
}
}
arrayA[i] = ch;
}
突破内循环是安全的原因是,一旦ch
(或原始代码中的arrayA[i]
)设置为' '
,那么在后续传递中内部循环,if
测试只有在arrayB[j]
已经' '
时才会成功,因此分配将使值保持不变(并且只是消耗cpu周期)。