我是ararin。从工作刚开始之前,其实我就一直算法很重要,然而在我平常工作中,几乎不会用到算法,或者都是一些很简单的算法。所以在重复的敲码中,也逐渐堕落了。每次想去学习也逐渐处于一种学了刷leetcode,忘了学,学了刷leetcode的一种状态。然而持之以恒才是不断学习最重要的状态。道理是谁都懂的,但是行动还是得自己一步一步走的。所以我决定在简书上单开个记事本,巨鹿下做下leetcode的题目的思路,保存一下集合。那就直接开始记录吧。
1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetCode)
这是leetcode的第一题,难度很简单。一般的,初次接触算法很容易会让人想到for for循环,很容易陷入误区。第一次做这题的时候,我也使用的是for for暴力循环,然而结果是做对了,执行效率却不能使人差强人意。
原版的for for循环我就不再写出了。因为后边做了3数之和的循环过后,我受教了更好的方法。回过头来看之前的代码,就更新了下代码。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let map = {}//临时数据池子。
for(let index = 0; index < nums.length; index++) {
if(map[target - nums[index]] === undefined) //在map中寻找我想要的数是否为 undefined。
map[nums[index]] = index //如果没有找到,那我就存储我的信息在map中。这里存到map中的key为数组值,val为下标
else
return [index, map[target - nums[index]]]//如果有我找的人的信息,那就返回[我的数组下标,我找到的人的数组洗标]
}
};
这个算法的思路其实有点类似于去征婚,比如我去登记所找妹子,我填了我的基本信息和爱好,然后提示我没有符合我要求的人,我就留下我的信息,然后回去等消息。然后下一个征婚的人来这里,然后填写她想要的人,如果正好匹配我的信息爱好,那就正好就是能组成一队。此时就返回这个妹子的数组下标,以及map中存储的我的数组下标。(填写信息到map中时,我的值作为key,我的数组下标作为val)
链接:https://leetcode-cn.com/problems/two-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
网友评论