两数之和-python解法
题目描述#
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
要求:空间复杂度 O(n),时间复杂度 O(nlogn)
错误代码和思路#
class Solution:
def twoSum(self , numbers: List[int], target: int) -> List[int]:
#思路错误因为题目要时间复杂度为O(nlogn),所以不能使用两层for循环
# write code here
res=[]
for i in range(len(numbers)):
for j in range(i+1,len(numbers)):
if numbers[i]+numbers[j]==target:
res.append(i+1)
res.append(j+1)
return res
正确思路和解题#
class Solution:
def twoSum(self , numbers: List[int], target: int) -> List[int]:
#由于不可以使用for循环,但是第二个数也需要进行记录数组下标值
而且需要经过数值得到下标值,所以可以使用字典来进行保存数组数值和下标。数组数值是key,下标为value
# write code here
hash= {}
res=[]
for i in range(len(numbers)):
temp=target-numbers[i]
if temp not in hash:
hash[numbers[i]]=i
else:
res.append(hash[temp]+1)
res.append(i+1)
break;
return res
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)