LeetCode 两数之和
两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思路:
1. 最直接的思路,两层for循环,查找有没有加起来是target的两个数,测试过只超过32%的人,时间复杂度不够优秀,是N*N
class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i] + nums[j] == target: return [i,j]
2. 采用字典来记录数据,然后通过字典查找一次只需logN的复杂度,来实现最终N*logN的时间复杂度
class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ nums_dict={} for i,num in enumerate(nums): nums_dict[i]=num for i in nums_dict: if (target - nums_dict[i]) in nums_dict.values(): if target - nums_dict[i] != nums_dict[i]: for j in nums_dict: if nums_dict[j] == target - nums_dict[i]: return [i,j] else: for j in nums_dict: if j == i: continue if nums_dict[j] == nums_dict[i]: return [i,j]