【发布时间】:2019-01-05 21:51:56
【问题描述】:
while 循环是O(logn)。 O(n) 内部循环是否会工作,因为它将最多连接 n 个字符(总共导致 O(logn + n))?使用 StringBuilder 会变成 O(1) 吗?
List<String> l = new ArrayList<>();
// some code to add N items to l
//.
//.
//.
while (l.size() > 1) {
int lo = 0, hi = l.size() - 1;
List<String> temp = new ArrayList<>();
while (lo < hi) {
temp.add("(" + l.get(lo) + "," + l.get(hi) + ")");
lo++;
hi--;
}
l = temp;
}
【问题讨论】:
-
@Strom 什么? O(2) 甚至是什么意思?现在,我可能不是编程方面最有经验的人,但我确实在我的数据结构和算法课程中给予了足够的关注,以了解没有 O(2)、O(3) 或 O(60) 这样的东西就此而言(等等)。 Big-O 用于描述算法的性能或复杂性。这不是一个真正的计时器。
-
@Strom 上面的代码无法计算为 O(1) 或任何其他常量/固定时间。列表的大小决定了这里的大部分运行时间,导致外循环和内循环都是 O(N)。由于这里的字符串连接本身是 O(N),所以我们得到 O(NNN) = O(N^3)。
标签: java string time-complexity big-o complexity-theory