【发布时间】:2021-07-18 17:22:12
【问题描述】:
我有一个用户列表,也有一对匹配用户的列表。即
const users = ["A", "B", "C", "D", "E", "F", "G"];
const alreadyMatchedUsers = [
{ user1: 'A', user2: 'B' },
{ user1: 'A', user2: 'C' },
]
我想查找唯一不匹配用户的列表。唯一性是指用户对 AB 和 BA 将被视为 1 对。
这是我想出的解决方案:
const alreadyMatchedUsers = [
{ user1: 'A', user2: 'B' },
{ user1: 'A', user2: 'C' },
]
const unMatchedArrary = []
// const users = ['A', 'B', 'C', 'D']
const users = []
for (let i = 0; i < 300; i++) users.push(i)
const n = users.length
const uniquePossiblePairs = []
const uniquePossiblePairsCount = (n * (n - 1)) / 2
for (let i = 0; i < n - 1; i++) {
console.log('Main loop+++++++++++++++++', users[i])
for (let j = i; j < n - 1; j++) {
// uniquePossiblePairs.push({ user1: users[i], user2: users[j + 1] });
const alreadyMatched = alreadyMatchedUsers.some(
(mpair) => (users[i] === mpair.user1 || users[i] === mpair.user2)
&& (users[j + 1] === mpair.user1 || users[j + 1] === mpair.user2),
)
if (!alreadyMatched) {
unMatchedArrary.push({ user1: users[i], user2: users[j + 1] })
}
console.log('Already Matched, ', users[i], users[j + 1], alreadyMatched)
}
}
console.log('UNIQUE POSSIBLE PAIRS Count', uniquePossiblePairsCount)
console.log('UNIQUE POSSIBLE PAIRS', uniquePossiblePairs)
console.log('UNMATCHED ARRARY ', unMatchedArrary)
}
这个解决方案给出了预期的结果,但它的操作非常昂贵。尝试在 300 个用户的情况下运行此代码,如果已经匹配的用户变得更大,它将变得更加昂贵。
我怎样才能让它更快?
谢谢
【问题讨论】:
标签: javascript arrays performance recursion