给定一个整数数组 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进行操作,时间复杂度过大,可先将其转换为字典。
推荐阅读
-
算法题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
LeetCode 1 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素
-
两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。...
-
c语言和Java语言实现,两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
[每日一题]给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。
-
算法(C++):给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,假设每种输入只会对应一个答案
-
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数 - python实现