欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数 - python实现

程序员文章站 2022-07-14 14:37:52
...

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。
输入数据包括两行:
第一行两个整数n(1 ≤ n ≤ 10 ^ 5),sum(1 ≤ sum ≤ 10 ^ 9)
第二行n个整数,范围均在32位整数内,以空格分隔
输出
如果找到和值为某值的两个数,输出两个数字的下标(数组下标从0开始),如果有多解,输出第一个数下标最小的那个解;否则输出false
示例
输入
6 9
2 3 5 6 7 10
输出
0 4

解法一
普通解法,时间消耗大

inputs = input().split()
n  = int(inputs[0])
target = int(inputs[1])

nums=list(map(int,input().split()))
flag =0
for i in range(n):
    if flag == 1:
        break
    num = target - nums[i]
    for j in range(i+1,n):
        if num == nums[j]:
            flag = 1
            index_1 = i
            index_2 =j
            break
if flag == 1:
    print(index_1,index_2)
else:
    print("false")

解法二
利用hash表(即字典),以时间换空间.

inputs = input().split()
n  = int(inputs[0])
target = int(inputs[1])

nums=list(map(int,input().split()))

#dict_num = {nums[i]:i for i in range(n)} 实现的效果一样
dict_num = {m:i for i,m in enumerate(nums)}

flag =0
index_list = []
for i in range(n):
    num = target- nums[i]
    if num in dict_num.keys():
        flag =1
        index_list.append(i)
        index_list.append(dict_num[num])
        break
if flag == 1:
    print(index_list[0],index_list[1])
else:
    print("false")

总结:如果涉及到小标和元素的操作,在循环过程中直接对list进行操作,时间复杂度过大,可先将其转换为字典。

相关标签: python学习

推荐阅读