题目要求:
自己的做法:
萌新第一次写算法题,只有比较暴力的解法:双重循环
第一重循环是为了遍历所有的数据,得到数据下标区间【0,nums.length -1】
在理解第二重循环之前,需要理解题目:两个整数不相等,并返回他们的下标。下标也不相等,并且这俩整数的下标是存在关系的。
第二重循环:在i区间内,找到符合题目要求的数
左边界,j = i + 1;是为了找两数下标不相等。 右边界,j 还是应在数组长度内
var twoSum = function (nums, target) {
var result = [];
for (var i = 0; i < nums.length; i++) {
for (var j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
result.push(i, j)
}
}
}
return result
}
学习别人的写法:借助es6的map
var twoSum = function (nums, target) {
var map = new Map();
for (var i = 0; i < nums.length; i++) {
let another = target - nums[i];// 2.得到另外一个数
if (map.has(another) && map.get(another) !== i) {// 判断map里面是不是another,并且他的下标不是i
return [i, map.get(another)]
}
map.set(nums[i], i);//1、 存入数据:边循环边存储,并不是存储所有的数据
}
return []
}
总结
对比和别人的写法,主要的差距在于思路。做法能理解,只是想不到那里去。
很大原因是因为对map数据结构掌握的不是很充分
打卡第一天~冲鸭~