我有两个
List<string>
l1 = {"one", "two","three","four"}
l2 = {"one", "three"}
Run Code Online (Sandbox Code Playgroud)
我想知道l2的所有内容是否都在l1中作为bool?
var contained = !l2.Except(l1).Any();
Run Code Online (Sandbox Code Playgroud)
请注意,有几个人提出了以下建议:
var contained = l2.All(x => l1.Contains(x));
Run Code Online (Sandbox Code Playgroud)
让我解释为什么这不是最好的解决方案,应该避免.
主要原因是它的速度较慢.因为在每一个项目它的速度较慢l2,但它一个线性扫描通过l1,一遍又一遍的每一个项l2.设m长度l1和n长度l2.所以这是扫描m项目,完成n时间.因此,总成本是O(m * n).替代方案将使用O(1)分摊查找构建两个哈希表.构建哈希表分别是O(m)和O(n).然后,对于每个n项目,检查项目是否在哈希表中.那就是O(n)摊销了.因此,总成本是O(m + n).
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |