12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- * @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]]
|