Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除元素的时间复杂性_Javascript_Arrays_Duplicates_Set - Fatal编程技术网

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)
将从