数组中两个元素相加=target,返回对应的下标

380 阅读1分钟

方法1 - 双指针 解法(数组已排序) 时间复杂度O(n)

function towSum(array, target) {
    let resultArr = [];
    let i = 0;
    let j = array.length - 1;
    while (i < j) {
        let sum = array[i] + array[j];
        if (sum < target) {
            i++;
        }else if (sum > target) {
            j--;
        }else {
            resultArr.push([i++,j--]);
        }
    }
    return resultArr;
}

方法2 - map+差值 解法(数组未排序) 时间复杂度O(n)

function towSum(array, target) {
    let resultArr = [];
    let map = new Map();
    for (let i = 0; i < array.length; i++) {
        let diff = target - array[i];
        if (map.get(diff) !== undefined) {
            resultArr.push([map.get(diff), i]);
        }else {
            map.set(array[i], i);
        }
    }
    return resultArr;
}