leetcode之 两数之和

from typing import List


class Solution:
    def two_sum(self, nums: List[int], target: int):
        d = {}
        for index, value in enumerate(nums):
            if value in d:
                return index, d.get(value)
            d[target - value] = index


if __name__ == '__main__':
    s = Solution()
    nums = [2, 7, 11, 15]
    target = 9
    print(s.two_sum(nums, target))

这道题最优的做法时间复杂度是 O(n)。

遍历数组,对每一个元素,在 字典 中找能组合给定值的另一半数字,如果找到了,直接返回两个数字的下标即可。如果找不到,就把这个数字存入 map 中,等待扫到“另一半”数字的时候,再取出来返回结果。

字典解释:
键:另一半数字
值:当前数字的下标

posted @ 2018-09-27 22:23  公众号python学习开发  阅读(408)  评论(0编辑  收藏  举报