单词书上第一个单词abandon,力扣也一般都是第一二题不会直接放弃力扣
不会很正常,看不懂答案很正常,慢慢学慢慢看,看完思路自己手敲一遍代码,总能学会的.有的人娃都有了还不会快速排序,有的人孩子都十岁了还不会红黑树,这些东西难吗?确实难,但要说难到一辈子学不会那就太夸张了,认真学习,努力学习总能学会学懂的.毕竟了解真相才能获得真正的自由.
思路:
1.创建一个map
为什么用map?而不用双重循环或者数组?
因为map效率高而且重复值不影响
2.for循环遍历nums数组
不能使用forEach,因为如果forEach里面return会直接返回undefined
3.用target减nums[i],用于选出哪个数与其相加等于target
4.检查map里面有没有这个数,如果有返回结果,如果没有则将num[i]当做key值,i当做value值放入map中
因为map.has()检查的是key是否有该元素而不是检查value,所以必须将nums[i]放入key值中,将i放入value中
// 这样写的复杂度是O(nlogn)
const twoSum = (nums, target) => {
const map = new Map();
for (let i = 0; i < nums.length; i++) {
const temp = target - nums[i];
if (map.has(temp)) return [map.get(temp), i];
else map.set(nums[i], i);
}
};
const arr = [2, -11, -8, 7];
console.log(twoSum(arr, 9));