Open 18355416639 opened 2 years ago
解法一:(不通过) 思路:循环遍历数组,然后拿到当前循环项和目标值得差值,使用indexOf再判断数组中是否包含这个差值,若包含会自动返回下标,最后输出符合条件的项。
var twoSum = function(nums, target) {
for(let i=0; i<=nums.length; i++) {
let res = target - nums[i]
if(nums.indexOf(res) >= -1) {
return [i,nums.indexOf(res)]
}
}
};
测试用例 [2,7,11,15,1] 9 通过 当测试用例更改为[11,15,2,7,1] 不通过,原因是遍历的当前元素比target大
修改为:
var twoSum = function(nums, target) {
for(let i=0; i<=nums.length; i++) {
if(target >= nums[i]) {
let res = target - nums[i]
if(nums.indexOf(res) > -1) {
return [i,nums.indexOf(Math.abs(res))]
}
}
}
};
当测试用例修改为[3,2,4] 6 时,以上解法不通过
修改为:
var twoSum = function(nums, target) {
for(let i=0; i<=nums.length; i++) {
if(target >= nums[i]) {
let res = target - nums[i]
if(res !== nums[i] && nums.indexOf(res) > -1) {
return [i,nums.indexOf(Math.abs(res))]
}
}
}
};
当测试用例修改为[3,3] 6 时,以上解法不通过 更换解决思路
解法二:(通过) 扩展知识:https://www.cnblogs.com/yuer20180726/p/11387699.html Map: 1.接收一个二维数组,或者直接new一个空的map
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam'); // 88
Set: 1、 创建一个Set,需要提供一个数组作为输入,或者直接创建一个空Set
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}
s.add(4);
s; // Set {1, 2, 3, 4}
s.add(4);
s; // 仍然是 Set {1, 2, 3, 4}
var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}
// 去除数组的重复成员
let array = [1,2,1,4,5,3];
[...new Set(array)] // [1, 2, 4, 5, 3]
代码如下:
var twoSum = function(nums, target) {
let map = new Map()
for(let i=0; i<nums.length;i++) {
let res = target -nums[i]
if(map.has(res)) {
return [map.get(res), i]
}
map.set(nums[i], i)
}
};
思路: 创建一个map对象,循环数组,计算当前项与目标值的差值,先判断map里是否有这个差值数,若没有,则往map里面赛进去数和下标,直到找到对应符合条件的数,输出
题解: 创建一个Map,来查找nums 是否出现过 target- num[I] 的数字,出现过则返回 map中查找到的数据,以及当前的下标
var twoSum = function(nums, target) {
const result = new Map()
return nums.reduce((pre, next, index) => {
let mid = target - next
if(result.has(mid)) {
pre = [result.get(mid), index]
}
result.set(next, index)
return pre
}, [])
}
题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6 输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6 输出:[0,1]