Leecode 第一题 简单

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 第一种方法: 执行速度很快, 内存中等


nums = [2,2,5,10,10]
target =12
a = []
def func(nums,target):
    for i in range(len(nums)):
        if (target - nums[i]) in a:
            for x,y in enumerate(a):
                if y == target-nums[i]:
                    yield [i, x]
        a.append(nums[i])

g =func(nums,target)
print(list(g))
[[3, 0], [3, 1], [4, 0], [4, 1]]
View Code

 第二种方法是面向过程的编程,执行速度中等, 内存中等

nums = [2,2,5,10,10]
target =12
num_list = []


def init(func):
    def inner(*args,**kwargs):
        res =func(*args,**kwargs)
        next(res)
        return res
    return inner


@init
def reader(foo):
    while True:
        a,b =yield
#         print(a,b)
      
        for index1 in range(len(a)):
            s = (index1,a[index1],b)

            foo.send(s)
            



@init
def judge(foo):
    while True:
        index1,num,targ =yield
        if targ - num in num_list:
            foo.send((index1, targ-num))
        else:
            num_list.append(num)

@init
def index_search(foo):
    while True:
        index1, num_search =yield
        for i,j in enumerate(num_list):
            if j ==num_search:
                foo.send((index1,i))
            
    
@init
def printer():
    while True:
        x,y =yield
        print([y,x])
        
        

g= reader(judge(index_search(printer())))
g.send((nums,target))
原文地址:https://www.cnblogs.com/vincent-sh/p/13063902.html