Следующая строка заставляет ваш код возвращать -1, когда может быть решение:
if (arr[i] >= m || arr[j] >= m) return -1;
Даже если одна цена может быть выше бюджета, вы должны учитывать, что могут быть доступны более дешевые товары. Возможно, у вас уже есть решения в result
, или они все еще могут быть найдены в более поздней итерации.
Мне не ясно, зачем вы сначала создаете объединенный массив из обоих входных массивов. Похоже, что это не приносит никакой пользы.
Если вы сортируете входные массивы, вы можете использовать систему с двумя указателями, где вы решаете, какой из них переместить, в зависимости от того, находится ли текущая сумма в установленных пределах или слишком отлично:
function getMoneySpent(keyboards, drives, b) {
keyboards = [...keyboards].sort((a, b) => b - a) // descending
drives = [...drives].sort((a, b) => a - b); // ascending
let k = keyboards.length - 1; // cheapest
let d = drives.length - 1; // most expensive
let maxSum = -1;
while (d >= 0 && k >= 0) {
let sum = keyboards[k] + drives[d];
if (sum === b) return b;
if (sum < b) {
if (sum > maxSum) maxSum = sum;
k--; // will increase sum
} else {
d--; // will decrease sum
}
}
return maxSum;
}