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


# leetcode submit region begin(Prohibit modification and deletion)
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dict1 = {}
        # 遍历一遍列表对应的时间复杂度为O(n)
        for i in range(0, len(nums)):
            # 相减得到另一个数值
            num = target - nums[i]
            # 如果另一个数值不在字典中,则将第一个数值及其的索引报错在字典中
            # 因为在字典中查找的时间复杂度为O(1),因此总时间复杂度为O(n)
            if num not in dict1:
                dict1[nums[i]] = i
            # 如果在字典中则返回
            else:
                return [dict1[num], i]
# leetcode submit region end(Prohibit modification and deletion)

# # second me:
# class Solution:
#     def twoSum(self, nums: List[int], target: int) -> List[int]:
#         if len(nums) < 2:
#             return
#         for i in range(0, len(nums) - 1):
#             for j in range(i + 1, len(nums)):
#                 if nums[i] + nums[j] == target:
#                     return [i, j]

 

posted on 2020-06-18 19:01  QzkRainPig  阅读(159)  评论(0编辑  收藏  举报