LeetCode-1 两数之和

给定一个整数数列,找出其中和为特定值的那两个数。

你可以假设每个输入都只会有一种答案,同样的元素不能被重用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

step 1:

class Solution(object):

    def twoSum(self, nums, target):      
        """                                  
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        list_len = len(nums)
        for i in range(list_len):
            for j in range(i+1,list_len):
                if nums[i] + nums[j] == target:
                    return [i,j]

Q:最后一个测试用例会超时,穷举法,循环了两次,时间复杂度O(N*N)


step2:这里是先生成一个哈希表(字典),然后循环过程中判断当前元素和哈希表(字典)中的数据相加是否满足条件,遍历nums,遍历过程中判断当前元素和哈希表(字典)中的值相加能不能满足要求,也就是target-当前元素的值在哈希表(字典)中是否存在,如果存在,就返回2个索引(注意是return[**,index]),如果不存在,那么当前元素存入哈希表(字典)


class Solution:

    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dic = dict()
        for index,value in enumerate(nums):
            sub = target - value
            if sub in dic:
                return [dic[sub],index]
            else:

                dic[value] = index


笔记:
  1、     
        twoSum函数的调用:
        s = Solution()
        print s.twoSum([3,2,4], 6)
    
        
  2、    
        enumerate的用法:
        enumerate()是python的内置函数,enumerate在字典上是枚举、列举的意思
        对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值

        例如:

        nums = [2, 7, 11, 15]

        for index, value in enumerate(nums):
        print index, value
        >>>
        0 2
        1 7
        2 11

        3 15

from:

https://www.jianshu.com/p/b71fc7307e42

你可能感兴趣的:(python)