/* * @Description: * @Autor: kindring * @Date: 2022-05-17 09:55:38 * @LastEditors: kindring * @LastEditTime: 2022-05-17 10:47:27 * @LastDescript: */ // 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。 // 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 // 你可以按任意顺序返回答案。 // 来源:力扣(LeetCode) // 链接:https://leetcode.cn/problems/two-sum // 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 // let nums = [2, 7, 11, 15], // target = 9; /** * 两数之和,时间优先,可优化 * @param {*} _nums * @param {*} _target * @returns */ function answer1(_nums, _target) { let map = new Map(); for (let i = 0; i < _nums.length; i += 2) { if ((_nums[i] + _nums[i + 1]) == _target) { return [i, i + 1] } else if ((_nums[i] + _nums[i - 1]) == _target) { return [i, i - 1] } else { if (map.has(_target - _nums[i - 1])) { console.log('1'); if (map.get(_target - _nums[i - 1]) != i - 1) { return [map.get(_target - _nums[i - 1]), i - 1] } } else if (map.has(_target - _nums[i])) { return [map.get(_target - _nums[i]), i]; } else if (map.has(_target - _nums[i + 1])) { return [map.get(_target - _nums[i + 1]), i + 1]; } } map.set(map.set(_nums[i - 1], i - 1)); map.set(map.set(_nums[i], i)); map.set(map.set(_nums[i + 1], i + 1)); } } // 空间优先 function answer2(_nums,_target){ let i = 0; while (true) { _target - _nums[i]; i++; } } console.log(answer1([3, 2, 4], 6)); console.log(answer1([2, 7, 11, 15], 9));; console.log(answer1([-1, -2, -3, -4, -5], -8));; //[2,4]]