leetcode 1两数之和

两数之和:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

法一:暴力算法

两个for循环验证完列表的所有组合看相加是否和target相等,注意返回的时候用return比较方便。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        length=len(nums)
        for i in range(length-1):
            for j in range(1,length):
                if i!=j:
                    if nums[i]+nums[j]==target:
                        return [i,j]

法二:哈希表——时间复杂度小于O(n2)以空间换时间

查找表法:哈希表;平衡二叉搜索树 

哈希表存列表的元素和下标分别作为键值和键

第一个元素对应的target-x一定不在哈希表中,直接放入即可,下标后移查找target-x是否在表中,如果不在存入哈希表,如果在返回下标即可,这样只完成了一次查表的过程,但是所需要的空间增加了——以空间换时间。

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。方便在for循环中同时遍历下标和元素。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable=dict()
        for i, num in enumerate(nums):
            if target-num not in hashtable:
                hashtable[nums[i]]=i
            else:
                return [hashtable[target-num],i]

你可能感兴趣的:(leetcode,算法,学习)