【问题标题】:how to optimise two for loops in java [closed]如何优化java中的两个for循环[关闭]
【发布时间】: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 &lt; j) 似乎没用,因为在这段代码中i 总是小于j。您还可以将a[i]+a[j] 存储在一个变量中,以便不计算两次。
  • 如果这是一个编码挑战并且你的时间限制已经超出,那么你不需要优化算法;你需要找到一个新的算法。实际问题可能有一些数学技巧可以简化它,并且在仅显示两个 for 循环时会丢失上下文。
  • 等等,如果是严格递增的,那么肯定已经排序了

标签: java algorithm for-loop data-structures


【解决方案1】:

这取决于这两个循环的作用。

想象这两个循环正在遍历一个二维表。 如果您需要找到表中所有元素的总和,则无法优化。您必须逐行遍历所有元素。

例如,如果您想找到 AI 的特定值...您必须一次又一次地遍历相同的值,在这种情况下,您可以通过不遍历之前执行的相同值来进行优化。 例如,如果表的这些值是树结构的值,并且您遍历一个分支,则不必遍历相同的分支。你可以像我们说的那样修剪它。

通过这种方式,您可以使用循环优化您在表格中的搜索。

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 2016-02-23
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多