Задача, которую вы упомянули, «отсортированный массив по двум суммам в Javascript», относится к поиску пары чисел в отсортированном массиве, сумма которых равна определенному целевому значению. Я предоставлю вам несколько способов добиться этого в JavaScript:
Метод 1: два указателя
Вы можете использовать метод двух указателей для эффективного решения этой задачи с временной сложностью O(n) и пространственной сложностью O(1). Вот код:
function twoSumSortedArray(nums, target) {
let left = 0;
let right = nums.length - 1;
while (left < right) {
const sum = nums[left] + nums[right];
if (sum === target) {
return [left, right]; // or return [nums[left], nums[right]] if you want the actual numbers
} else if (sum < target) {
left++;
} else {
right--;
}
}
return []; // return an empty array if no such pair exists
}
Метод 2: двоичный поиск
Другой подход заключается в использовании двоичного поиска для поиска дополнения каждого числа в массиве. Это решение имеет временную сложность O(n log n) и пространственную сложность O(1). Вот код:
function twoSumSortedArray(nums, target) {
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
let low = i + 1;
let high = nums.length - 1;
while (low <= high) {
const mid = Math.floor((low + high) / 2);
if (nums[mid] === complement) {
return [i, mid]; // or return [nums[i], nums[mid]] if you want the actual numbers
} else if (nums[mid] < complement) {
low = mid + 1;
} else {
high = mid - 1;
}
}
}
return []; // return an empty array if no such pair exists
}