从有序数组中找出一对和为 n 的元素

如 [1, 2, 4, 6, 8] 找一对和为 10 的元素,[2, 8]

解:两端向中间靠拢,小于目标值左边移动,大于目标值右边移动,直到会合。

function find(arr, total) {
const len = arr.length;
let front = 0;
let back = len - 1;
for(let i = 0; i < len; i++) {
const d = arr[front] + arr[back] - total;
if (d > 0) {
back--;
} else if (d < 0) {
front++;
} else {
return [arr[front], arr[back]];
}
}
}
find([1,2,4,6,8], 10);

无序数组 // 空间换时间,先循环将元素一个个放 map,然后在执行一次循环并在 map 中找是否有补数