首页 > 解决方案 > 为什么将集合转换为数组时输出为空?

问题描述

我正在使用以下说明解决Leetcode 26 Remove Duplicates from Sorted Array :

给定一个排序数组 nums,就地删除重复项,使每个元素只出现一次并返回新的长度。

不要为另一个数组分配额外的空间,您必须通过使用 O(1) 额外内存就地修改输入数组来做到这一点。

我的解决方案是首先创建一个集合,迭代数组中的每个数字并将每个数字添加到集合中,然后简单地将集合转换为数组。

var removeDuplicates = function(nums) {
  let set = new Set();
  for (let num of nums) {
    set.add(num);
  }
  return Array.from(set); 
};

当我console.log我的数组时,它会输出 Leetcode 正在寻找的答案,但是当我提交时,输出是[]. 为什么会这样?

标签: javascriptalgorithm

解决方案


要回答主要问题,您最好使用set.values()从集合中获取所有值,如下所示

return [...set.values()]

但是正如您所说,创建一个新集将占用额外的内存并违反 O(1) 内存;一个简单的解决方案是迭代元素,并将前一个元素保留在一个变量中,如果当前元素等于前一个元素,则删除当前元素。然后最后返回数组长度


推荐阅读