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

Tags
algorithm
Created
Jul 3, 2020 5:10 AM

如 [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 中找是否有补数

SuperMade with Super