3 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
您可以采用一個(gè)以所需增量作為鍵的哈希表。
這種方法只需要一次迭代。
function solution(array, target) {
const seen = {};
for (const value of array) {
if (seen[value]) return true;
seen[target - value] = true;
}
return false;
}
console.log(solution([5, 4, 3, 2, 1], 9)); // true
console.log(solution([5, 4, 3, 2, 1], 10)); // false

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是使用數(shù)組某種方法的簡(jiǎn)單一行解決方案。
const Solution = (array, target) =>
array.some((x, i) => array.some((y, j) => i !== j && x + y === target));
console.log(Solution([5, 4, 2, 3, 1], 9));
console.log(Solution([5, 4, 3, 2, 1], 10));
console.log(Solution([5, 4, 3, 2, 1], 5));

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以維護(hù) aSet
來(lái)提高效率。
當(dāng)您在數(shù)組中遇到新數(shù)字時(shí),從目標(biāo)總和中減去該數(shù)字。這將告訴您需要與當(dāng)前數(shù)字相加的金額才能達(dá)到目標(biāo)總和。您可以使用 O(1) 檢查該數(shù)字/金額是否在集合中.has()
。如果它在集合中,您可以返回 true,否則,您可以將該數(shù)字添加到集合中以檢查數(shù)組的進(jìn)一步迭代。
請(qǐng)參閱下面的示例:
function solution(array, target) {
? const set = new Set();
? for(const num of array) {
? ? if(set.has(target-num))
? ? ? return true;
? ? set.add(num);
? }
? return false;
}
console.log(solution([5,4,2,3,1], 9));
添加回答
舉報(bào)