给一个数组,和一个值,要求返回两数相加等于目标值的下标
    思路:循环,取差,如果数组包含差值返回下标,否则下一轮循环

    1. // 使用for + indexOf
    2. function sum (arr, target) {
    3. for (let i = 0; i < arr.length; i++) {
    4. let min = target - arr[i];
    5. let index = arr.indexOf(min);
    6. if (index > -1 && index !== i) {
    7. return [i, index];
    8. }
    9. }
    10. }
    11. // 使用循环+对象的方法
    12. function sum (arr, target) {
    13. let res = {};
    14. for (let i = 0; i < arr.length; i++) {
    15. let min = target - arr[i];
    16. if (min in res) {
    17. return [res[min], i];
    18. }
    19. res[arr[i]] = i;
    20. }
    21. }

    进阶版,有序数组,求两数和,使用双指针

    1. function sum (arr, target) {
    2. let i = 0,
    3. j = arr.length - 1;
    4. while (i < j) {
    5. if (arr[i] + arr[j] === target) {
    6. return [i, j];
    7. } else if (arr[i] + arr[j] < target) { // 如果和比target小,i右移
    8. i++;
    9. } else { // 反之 j 左移
    10. j--;
    11. }
    12. }
    13. }

    再改版,求有序数组上限和,给一个目标值target,返回最两数相加最接近target的下标

    1. // 类似二分法 target / 2, for数组中找 最接近 t/2的两个数
    2. function sumTwo (arr, target) {
    3. let k = target / 2;
    4. for (let i = 1; i < arr.length; i++) {
    5. if (arr[i - 1] - k <= 0 && arr[i] - k >= 0) {
    6. return [i - 1, i];
    7. }
    8. }
    9. }
    10. // 双指针法,先尽量将j左移
    11. function sumTwo (arr, target) {
    12. let resi = 0,
    13. resj = 0,
    14. max = 0,
    15. i = 0,
    16. j = arr.length - 1;
    17. while (arr[i] + arr[j] > target && i < j) { // 第一次循环 如果头尾相加大于target,j左移动
    18. j--; // j左移可以缩短下次循环数组的长度
    19. }
    20. while (arr[i] + arr[j] <= target && i < j) { // 第二次循环
    21. if (arr[i] + arr[j] > max) { // 如果本次和大于上次和,保存 i, j, 和max
    22. resi = i;
    23. resj = j;
    24. max = arr[i] + arr[j];
    25. }
    26. i++;
    27. if (arr[i] + arr[j] > target && i < j) {
    28. j--;
    29. }
    30. }
    31. return [resi, resj, max];
    32. }

    https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/solution/js-xie-leetcode-by-zhl1232-21/
    https://www.cnblogs.com/echolun/p/12961904.html