从有序数组中找出一对和为 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 中找是否有补数