You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术面试编码挑战:三数组去重及移除负数的实现疑问

解决思路:补上负数过滤的关键步骤

嘿,看来你已经搞定了去重这一步,差的就是负数过滤啦!核心遗漏的其实就是对元素添加“非负”的条件校验,我给你拆解下具体要补的步骤:


1. 明确需求的两个核心约束

你需要最终的结果同时满足:

  • 无重复元素(你已实现)
  • 无负数元素(遗漏的部分)

所以不管你用哪种方式处理数组,都要把「元素≥0」这个条件加进去。

2. 针对不同去重方式补全代码

我举两种常见场景的补全示例:

场景1:用Set快速去重(常见写法)

如果你原来的代码是先合并数组、再用Set去重:

// 原去重代码(仅完成去重)
const mergedArrays = [...arr1, ...arr2, ...arr3];
const uniqueNumbers = [...new Set(mergedArrays)];

那只需要在去重后(或去重前)加上filter过滤负数:

// 补全后:先过滤负数再去重(更高效,减少Set的元素量)
const mergedArrays = [...arr1, ...arr2, ...arr3];
const filteredNonNegative = mergedArrays.filter(num => num >= 0);
const finalResult = [...new Set(filteredNonNegative)];

// 或者去重后再过滤(逻辑更直观,但性能稍差)
const mergedArrays = [...arr1, ...arr2, ...arr3];
const uniqueNumbers = [...new Set(mergedArrays)];
const finalResult = uniqueNumbers.filter(num => num >= 0);

场景2:用循环手动去重

如果你是通过遍历+判断是否已存在来实现去重:

// 原去重代码(仅完成去重)
const uniqueNumbers = [];
for (const num of [...arr1, ...arr2, ...arr3]) {
  if (!uniqueNumbers.includes(num)) {
    uniqueNumbers.push(num);
  }
}

那只需要在判断是否添加的条件里,加上「非负」的校验:

// 补全后:同时判断非负和是否重复
const finalResult = [];
for (const num of [...arr1, ...arr2, ...arr3]) {
  // 先判断是否非负,再判断是否已存在
  if (num >= 0 && !finalResult.includes(num)) {
    finalResult.push(num);
  }
}

3. 额外提示:处理顺序影响性能

如果你的数组规模很大,先过滤负数再去重会更高效——因为提前排除了不需要的负数,减少了后续去重操作的元素数量。


内容的提问来源于stack exchange,提问作者jmccommas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:25:52