将数组转换为集合的时间复杂度 (Big-O)



所以在JS中有多种方法可以将Array转换为Set

示例 #2绝对是O(n),因为遍历数组的所有元素。示例 #1的情况是否相同? 还是JS确实在后台为我们做了一些优化?

如果是,使用示例 #1有什么缺点吗?

例 1

const arr = [ 1, 3, 2, 3, 5 ];
const set = new Set(arr);
console.log(set);
/*
Output: Set { 1, 3, 2, 5 }
*/

例 2

const arr = [ 1, 3, 2, 3, 5 ];    
const set = new Set();
arr.map(item => set.add(item));
console.log(set);
/*
Output: Set { 1, 3, 2, 5 }
*/

它仍然是O(n); JS没有神奇的方法将所有n元素放入Set中,而无需实际遍历所有n元素。低于O(n)的唯一方法是跳过一些元素,如果必须考虑将它们全部包含在Set中,这显然是不可能的。

最新更新