【发布时间】:2021-06-10 16:15:41
【问题描述】:
有没有办法优化这些 for 循环?
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(i < j)
{
if(a[i]+a[j] >= l && a[i]+a[j] <= r)
count++;
}
}
}
【问题讨论】:
-
这里有什么不好的地方?
-
“优化”是什么意思?您是否试图节省空间、时间或计算复杂性?您是否进行了基准测试以查看这是否是您的实际问题?要求我们“优化”您的代码就像要求汽车修理工“改进”您的引擎然后走开。它可能意味着很多事情,而且您正在查看的部分通常甚至不是正确的部分。
-
if(i < j)似乎没用,因为在这段代码中i总是小于j。您还可以将a[i]+a[j]存储在一个变量中,以便不计算两次。 -
如果这是一个编码挑战并且你的时间限制已经超出,那么你不需要优化算法;你需要找到一个新的算法。实际问题可能有一些数学技巧可以简化它,并且在仅显示两个 for 循环时会丢失上下文。
-
等等,如果是严格递增的,那么肯定已经排序了
标签: java algorithm for-loop data-structures