【leetcode】两数之和

 
题目中文
  
  给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。
  你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
 
  示例:
 
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]

   

算法实现
 
 
第一种:暴力匹配算法
 

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        if len(nums) < 2:
            return []

        iLen = len(nums)
        for i in range(iLen):
            for j in range(i + 1, iLen):
                if nums[i] + nums[j] == target:
                    return [i, j]
        return []

 
第二种:通过hash的方式
 
class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        if len(nums) < 2:
            return []

        iLen = len(nums)
        hashDict = {}
        for i in range(iLen):
            find = target - nums[i]
            if find in hashDict:
                return [hashDict[find], i]
            else:
                hashDict[nums[i]] = i
        return []

由于hash可以使时间复杂度降低到常数阶,所以在查询时更快!

 
推荐
原文地址:https://www.cnblogs.com/baochuan/p/11691747.html