(Python基础习题)给出一个整数数组,请在数组中找出两个加起来等于目标函数的数。

Python基础习题

给出一个整数数组,请在数组中找出两个加起来等于目标函数的数。

给出函数twoSum需要返回这两个数字的下标(index1,index2),需要满足index1小于index2.

注意:下标从1开始,并且假设给出的数组中只存在唯一解

例如:

给出的数组为[20,70,110,150],目标值为90

输出index1=1,index2=2

解题思路:

1,先内部给定一组数组及需要求和的目标值,根据题目,我们可以循环相加,方法为从第一个数开始循环,每个数分别加这个数后面的所有的数

其中最后一个数后面没有数,第一个数不需要与本身相加

利用for循环,进行如下操作,检查i 及各个相加结果:

num_list = [20,70,110,150]
num_target = 90

for i in num_list[:-1]:
    result = [i+j for j in num_list[i+1:]]
    print(i)
    print(result)
    
运行结果:
20
[]
70
[]
110
[]

2,i值没有问题,输出结果为空,分析原因为j 不能用i+1循环,而应该用i的索引值+1循环,

由于for循环推导式只能输出列表,因此改为for循环嵌套

修改后如下:

num_list = [20,70,110,150]
num_target = 90

for i in num_list[:-1]:
    for j in num_list[num_list.index(i)+1:]:
        result = i + j
        print(i)
        print(j)
        print(result)
        
运行结果:

20
70
90
20
110
130
20
150
170
70
110
180
70
150
220
110
150
260

3,结果没有问题,加入判断条件及输出结果:

num_list = [20,70,110,150]
num_target = 90

for i in num_list[:-1]:
    for j in num_list[num_list.index(i)+1:]:
        result = i + j
        # print(i)
        # print(j)
        # print(result)
        if result == num_target:
            print(num_list.index(i)+1,num_list.index(j)+1)
            break
            
运行结果:
1 2

4,功能实现,加入人机交互:

inset_list = list(input('请给定一个以,隔开数组:').split(','))
# num_list = [20,70,110,150]
num_target = int(input('请给一个结果:'))
# num_target = 90
num_list = [int(item) for item in inset_list]

for i in num_list[:-1]:
    for j in num_list[num_list.index(i)+1:]:
        result = i + j
        # print(i)
        # print(j)
        # print(result)
        if result == num_target:
            print([num_list.index(i)+1,num_list.index(j)+1])
            break
            
运行结果:
请给定一个以,隔开数组:20,70,110,150
请给一个结果:90
[1, 2]

猜你喜欢

转载自blog.csdn.net/weixin_42569662/article/details/117070334