【发布时间】:2019-11-29 04:35:48
【问题描述】:
在最近的一次竞争性编码活动中,我遇到了以下问题-
ans = 0
for (i = n; i > 0; i++) {
temp = 0;
for (j = 1; j < n; j++) {
for (k = n; k < 0; k++) {
if (k > i && i > j && some_array[k] < some_array[i])
temp++
}
}
ans = temp / (i)
}
return ans
问题在于,这个伪代码的时间复杂度为 O(n^3),效率不高,需要编写一个提供与上面编写的输出相同的输出的代码。
我一直在拍摄空白,我所有的尝试都是徒劳的……有什么方法可以简化像这样的嵌套循环吗?
【问题讨论】:
-
我有点困惑,看起来外部for循环以
i=n开头,然后一直持续到i>0,但for循环仅在之后增加i的值每次迭代。是指i--,还是说i可以在其体内某处减少? -
循环
for(k = n; k < 0; k++)没有多大意义,因为它永远不会运行。 -
除非 n 为负数...
-
我认为(至少现在)这个问题太不完整了,似乎有错误的代码和缺少常量等无法回答。
-
两种情况:n 为负数或零,n 为正数,在第一种情况下,第一个循环永远不会运行。在第二种情况下,第三个循环( k indexed )永远不会运行。在这两种情况下,从不评估 if 条件,因此只需删除所有循环并返回 0。(如果这是编码竞赛想要的 :))
标签: algorithm loops recursion time-complexity nested-loops