gpt4 book ai didi

javascript - 从两个数组中返回唯一元素

转载 作者:行者123 更新时间:2023-11-30 14:29:49 24 4
gpt4 key购买 nike

我有两个数字数组,我想获取两个数组中出现的唯一数字。然后我还想返回两个数组中的唯一数字。

例如:

INPUT:
let arr1 = [1234,4056,3045]
let arr2 = [5678,1234,5001]

OUTPUT:
only in arr1: [4056, 3045]
only in arr2: [5678, 5001]
in both lists: [1234]

这是我的解决方案,它有效,但我想不出如何优化我的解决方案。只使用 JavaScript,没有像 loadash 这样的工具。有什么想法吗?:

const getUniqueNumbers = (arr1, arr2) => {
let uniqueOfBoth = arr1.filter((ele) => {
return arr2.indexOf(ele) !== -1
})

let uniqueOfList1 = arr1.filter((ele) => {
return arr2.indexOf(ele) == -1
})

let uniqueOfList2 = arr2.filter((ele) => {
return arr1.indexOf(ele) == -1
})

return `Unique numbers from both list are ${uniqueOfBoth}
Unique nums to List1 : ${uniqueOfList1}
Unique nums to List2 : ${uniqueOfList2}
`
}

let result = getUniqueNumbers([1234, 4056, 3045], [5678, 1234, 5001])
console.log(result)

最佳答案

我认为这种方法很好,只要它不会成为瓶颈。您正在执行三个 O(n**2) 操作来获取您的列表,因此如果有一种方法可以降低复杂性,那就太好了。

您可以尝试的一件事是使用哈希表来记录数字出现的次数。但是您需要有点聪明,因为您不能只数数,否则您将不知道 1 表示 arr1 还是 arr2。但是由于只有 4 种可能性,您只需要 2 位来表示它们。所以当它在 array1 中时你加 1,当它在 array1 中时你加 2。这意味着 1 在 arr1 中,2 在 arr2 中,而 3 在两者中。创建计数仅为 O(n+m),其中 n 和 m 是数组长度。 (但是,您仍然需要对其进行过滤以获得最终结果)

const getUniqueNumbers =(arr1,arr2) =>{
let counter = {}
arr1.forEach(i => counter[i] = counter[i] ? counter[i] + 1 : 1)
arr2.forEach(i => counter[i] = counter[i] ? counter[i] + 2 : 2)

return counter
}
let counts = getUniqueNumbers([1234,4056,3045],[5678,1234,5001])
console.log(counts)

然后这只是一个过滤你想要的东西的问题,比如:

let both = Object.keys(counter).filter(key => result[key] === 3)

关于javascript - 从两个数组中返回唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51389201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com