python之有序数组内的两数之和

这是一个关于算法实现的问题,给定一个升序排列的字符串,需要找到两个数使得它们的和等于目标值。解决方案是首先将字符串转换为整数列表,然后通过遍历列表并查找目标值减当前元素的差是否存在于列表中,如果存在且不等于当前元素的索引,则返回这两个数的索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目内容:

给定一个已按照升序排列的字符串number_string,请你从中找出两个数满足相加之和等于目标数 target。

函数应该以长度为 2 的整数列表的形式返回这两个数的下标值。返回的下标从1开始计数,所以答案数组应当满足 1 <= index[0] < index[1] <=len(numbers)。

注意:每个输入只对应唯一的答案,而且你不可以重复使用相同的元素(返回的两个下标不可以相同)。

注意:你应该需要将第一个输入的字符串转换成数值类型的列表

输入格式:

第一行是字符串,按照提示使用input输入

第二行是需要求和的目标值

输出格式:

长度为2的列表

输入样例:

0,1,2,3,4,5

8

输出样例:

[4,6]

(解释:3+5=8,这两个数字对应的索引值是4和6。虽然4+4=8,但是只有一个4,不能重复使用)

解决思路:

先使用split函数用‘,’将输入的字符串切片成列表,再利用map函数将列表内元素转换为int型

def twosum(number_string,target):
    lst=number_string.split(',')
    lst=list(map(int,lst))
    target=int(target)
    for i in lst:
        a=target-i
        if a in lst and lst.index(a)!=lst.index(i):
            return [lst.index(i)+1,lst.index(a)+1]



print(twosum(input(), int(input())))# 此处输入由系统自动完成不需要自己输入

map函数使用:map(type,列表名)

split函数使用:字符串.split(' ')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值