Leetcode学习01
Leetcode学习01
题目描述:
给定一个整数数组 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]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
解题思路
关键词:哈希表 查找
将给定的值扫描一遍,扫描的时候同时查找是否和前面已经扫过的值匹配(也就是:和为所需要的值 target)
而这个“匹配”的过程,其实就是一种“查找” ,在查找是否具有满足条件的值。也就是在查找x之前 是否存在 target-x的值
思路一 暴力全扫描
扫一个值时,查查看前头是否有target-x在前头。
(也就是使得nums[i]+nums[j]=target的存在)
思路二 采用哈希表存储
用哈希表这一数据结构进行数据的存储,实现快速查找
哈希表:也叫散列表,是一种数据结构,哈希表中存储的是键值对,也就是key-value这个对。
在哈希表中可以通过key ->哈希函数->索引 快速查找到相应的值
作用:这种数据结构方便我们进行数据的查找,在哈希表中查找key十分快速
在python中,可以通过内置数据结构 dic() 获得一个哈希表 ,也就是说,一个字典就可以看成是一个哈希表,在哈希表中我们想要查找一个key是否在里面,只需要将key输入,就可以快速查出是否有键值key对应的对 是否存在 是何值
这道题通过构建一个哈希表,边扫描边存入哈希表,然后在查找的时候直接查找表中是否有键值为target-x的元素存在(对于哈希表来说实现这中寻找键值的查找过程十分轻松)于是实现了快速的查找!!
时间复杂度:o(N),N为数组元素个数 顺带一提,查找target-x这个过程只需o(1)
题解代码
1 | def twoSum(self, nums, target): |
启示
哈希表(散列表)这个数据结构可以迅速的实现查找,在哈希表中查找键值是否存在与键值对应的值是多少是很轻松的
你在哈希表中存了什么数据,你就是在什么范围中查找,就像是一个数据库一样,你放了啥,你就只能在你放了的东西范围中查找~
边扫描边存入,可以实现“记录先前已遍历过的元素”这一作用。当还需要“回头”做一些操作的时候就可以方便的调出记录进行查找与维护啥的。
像这种匹配问题,转化一下就是一个查找问题!
找两个数满足什么什么条件,变化一下,就是对于一个变量来说,对其不同值查找是否存在一个数,可以“迎合”这个变量此时取值,满足条件,因此本质上这种问题就是一个查找问题!!!要学会问题的转化