Javascript 删除元素的时间复杂性
我有一个排序数组:Javascript 删除元素的时间复杂性,javascript,arrays,duplicates,set,Javascript,Arrays,Duplicates,Set,我有一个排序数组: let mySortedArray = [1,1,5,6,8,8,9,25,25] 我想以O(1)的时间和空间复杂度从这个数组中删除任何重复项。首先,这可能吗 我的解决方案如下: 我将数组转换为一个集合,然后删除所有重复的数组 let mySet = new Set(myArray); 这在时间和空间上的复杂性是什么 如果我要将集合转换回数组: let myNewArr = Array.from(mySet); 那么整个方法的时间和空间复杂度是多少 这是删除数组副本的最
let mySortedArray = [1,1,5,6,8,8,9,25,25]
我想以O(1)的时间和空间复杂度从这个数组中删除任何重复项。首先,这可能吗
我的解决方案如下:
我将数组转换为一个集合,然后删除所有重复的数组
let mySet = new Set(myArray);
这在时间和空间上的复杂性是什么
如果我要将集合转换回数组:
let myNewArr = Array.from(mySet);
那么整个方法的时间和空间复杂度是多少
这是删除数组副本的最佳方法还是有更好的方法?我认为在
O(1)
中不可能做到这一点,因为为了知道是否有任何其他元素被复制,您必须遍历整个数组,至少查看每个元素一次。因此,我相信您只需要根据您的时间复杂性获得O(N)
。也可能提供进一步的见解我认为O(1)不可能实现这一点。从一个数组创建一个集合使用迭代器接口iirc,所以我认为它的复杂性是O(n),因为数组的每个元素仍然会被循环以将其添加到集合中。由于数组已经排序,可能有一些方法可以得到O(n)的一小部分,但您仍然必须检查至少两个元素,因为我们还不知道有多少唯一元素。由于我还不支持Set(),我使用以下通用函数,即O(n),我想:const unique=()=>{const seen={};return item=>{const json=json.stringify(item);return seen.hasOwnProperty(json)?false:(seen[json]=true);};}
然后mySortedArray.filter(unique())代码>。这篇文章中有一些相关信息:。既然你已经有了一个排序数组,我想如下:[1,1,5,6,8,8,9,25,25]。过滤器((item,index,all)=>all[index-1]!==item)
将从