擅长:python、mysql、java
<p><strong>于2019年10月26日更新</strong></p>
<p>作为一般建议,使用选项2。从一开始就使用集合。在</p>
<p>在Python中,集合是散列集,列表是动态数组。对于两者,插入新元素是<code>O(1)</code>。但是检查集合中是否已经存在元素对于列表是<code>O(n)</code>,对于集合是<code>O(1)</code>。在</p>
<p>所以方案1马上就出来了。每次插入时检查该列表会使整个算法<code>O(n^2)</code>。在</p>
<p>选项2和3的复杂性相同,<code>O(n)</code>。选项3的问题是,您使用两个数据结构,因此在它们之间移动对象的开销很大。所以在微观基准测试中,选择2将获胜。在</p>
<p>因为选项2和选项3的复杂性相同,所以确定哪个更快的唯一方法就是对程序进行基准测试。缓存位置、内存使用量和迭代次数等因素可能会产生明显的差异,并使其中一个优于另一个。但不要过早地优化。代码的可读性和可维护性更为重要,而选项2可能更具可读性。在</p>