【发布时间】:2013-01-08 19:18:02
【问题描述】:
我有一个 ArrayList 的 ArrayList。我想确保每个组成的 ArrayLists 具有相同数量的项目。有没有办法在不到 n 的时间内做到这一点!时间?
【问题讨论】:
-
为什么这需要 O(n!) 时间?
-
因为我写简单的代码太久了,心都融化了。
标签: java algorithm data-structures arraylist
我有一个 ArrayList 的 ArrayList。我想确保每个组成的 ArrayLists 具有相同数量的项目。有没有办法在不到 n 的时间内做到这一点!时间?
【问题讨论】:
标签: java algorithm data-structures arraylist
绝对!一次迭代一个ArrayLists。存储第一个ArrayList 的大小,然后确认所有其他ArrayLists 的大小与第一个列表的大小匹配。所需的总时间为 O(n),其中 n 是列表的数量。
例如:
public static boolean listsHaveSameSize(List<List<?>> allLists) {
List<?> first = null;
for (List<?> list: allLists) {
if (first == null) {
first = list;
} else if (list.size() != first.size()) {
return false;
}
}
return true;
}
希望这会有所帮助!
【讨论】:
else分支--list可以是null。
else if (list == null) { return false; } 步骤。如果 OP 需要检查内容的一致性,那么一开始就无法 100% 控制顶级列表的内容,所以这对我来说似乎是谨慎的。顺便说一句,存储first 的大小(一旦它不是null)并使用它而不是重复调用size() 可能是个好主意。
NPE,然后在我的代码中有大量的if (...!= null)
null 列表可以被忽略;它可以被视为一个空列表;它可以强制返回一个false 值(也许只有在至少还有一个非null 元素的情况下);它可能会抛出一个 NPE。根据上下文,其中任何一种都可能有意义。由于没有指定合同,我只是指出代码(如所写)假定了最后一种可能性。