1. 题目:
    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数 组中同样的元素。

  2. 示例:
    给定 nums = [2, 7, 11, 15], target = 9
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

  3. 思路:
    思路1.两层for循环遍历列表,但时间复杂度是O(N²)。

class Solution( ):
    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.哈希表(hash table) :把key值映射到哈希表中一个位置来访问,时间复杂度是O(N)。哈希表具体知识,可以看Hash表的理论基础与具体实现(详细教程)

  • 建立nums_hash
  • 寻找和为target的2个数
  • 返回下标
class Solution:
    def twoSum(self, nums, target):
        \"\"\"
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        \"\"\"
        nums_hash = {} 
        nums_len = len(nums)
        for i in range(nums_len):
            dif = target - nums[i]
            if dif in nums_hash: 
                return [nums_hash[dif], i]
            nums_hash[nums[i]] = i
        return []
    
if __name__ == \'__main__\':
    nums = [1, 2, 3]
    target = 3
    print(Solution().twoSum(nums, target))    
收藏 打印