leetcode 1. Two Sum python

来源:互联网 发布:java底层源代码 编辑:程序博客网 时间:2024/06/06 00:00

闲的蛋疼,每天刷刷。可是发现自己第一题都不会啊,所以记录下来,方便自己复习。

题目

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.


给定一个整型的数组,和一个target。返回两个加起来的和为target的数字下标。

你可以假定每个输入,都会恰好有一个满足条件的返回结果。并且每个元素只能使用一次。


例子

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].


解法 

class Solution(object):    def twoSum(self, nums, target):        if len(nums) <= 1:            return False        buff_dict = {}        for i in range(len(nums)):            print(buff_dict)            if nums[i] in buff_dict:                return [buff_dict[nums[i]], i]            else:                buff_dict[target - nums[i]] = ia=Solution()print(a.twoSum(nums = [2, 7, 11, 15], target = 18))

解释

感觉解题的思想好奇妙。上面代码的运行结果如下所示:

{}{16: 0}{16: 0, 11: 1}[1, 2]
建立一个buff_dict,这个dict的key为元素与target的差值,value为元素在nums列表中的下标。这样就保证了每个key-vaule对应的值之和为target。这样只要遍历nums列表,找到元素值等于dict中的key的值那个元素就好了。

所以通过   nums[i] in buff_dict  判断下,然后  return [buff_dict[nums[i]], i] 就ok了。

原创粉丝点击