victory的博客

长安一片月,万户捣衣声

0%

leetcode | 1.两数之和

1.两数相加

题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

题目链接

思路

1.暴力枚举法
枚举数组中的每一个数x,寻找数组中是否存在target-x
2.哈希表
改进了方法1中寻找数组中是否存在target-x的过程

代码

class Solution(object):
    def twoSum(self, nums, target):  # O(N^2)
        """
        暴力枚举法

        :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]

    def twoSum1(self, nums, target):  # O(N)
        hashtable = dict()
        for i, num in enumerate(nums):
            if target - num in hashtable:
                return [hashtable[target - num], i]
            hashtable[nums[i]] = i
        return []


if __name__ == "__main__":
    slt = Solution()
    t = slt.twoSum([2, 7, 11, 15], 9)
    print(t)