给定一个整数数组nums和一个目标值target,请在数组中找到和为目标值的两个整数,并返回它们的数组下标。您可以假设每个输入只有一个答案。但是,您不能在此数组中重复使用相同的元素。示例:给定nums=[2,7,11,15],target=9,因为nums[0]+nums[1]=2+7=9,它返回[0,1]来源:LeetCode链接:https://leetcode-cn.com/probl...版权归灵口网络所有。商业转载请联系官方授权,非商业转载请注明出处。第一种方案:可以通过暴力搜索的方式进行二层循环,外层按顺序循环,内层从外层元素class的位置开始Solution(object):deftwoSum(self,nums,target):""":typenums:List[int]:typetarget:int:rtype:List[int]"""fori,v1inenumerate(nums):forj,v2inenumerate(nums[i+1:]):if(v1+v2)==target:return[i,i+j+1]算法复杂度O(N2),空间复杂度O(1)第二种方法循环一次元素,计算当前元素和target的区别,查询元素后数组中的元素classSolution(object):deftwoSum(self,nums,target):""":typenums:List[int]:typetarget:int:rtype:List[int]"""fori,v1inenumerate(nums):t=target-v1try:index=nums[i+1:].index(t)return[i,index+i+1]除了:pass算法复杂度O(n2),空间复杂度O(1)第三种方法利用hash算法复杂度O(1)的特性,可以快速查询需要数据的索引。定义一个dict,遍历一次数组,将数组中的元素存储在dict中,dict的key为原数组的value值,value为原数组的位置索引,然后再次遍历数组,计算每个目标值的值,并在字典中查找类解决方案(对象):deftwoSum(self,nums,target):""":typenums:List[int]:typetarget:int:rtype:List[int]"""result={}forindex,valueinenumerate(nums):result[value]=indexforindex,valueinenumerate(nums):t=target-valuej=result.get(t)ifjisnotNoneandindex!=:return[index,j]算法复杂度O(n),空间复杂度O(1)第四种方法对于第三种方法,不需要将所有数组加载到dict中,所以你可以只用一个循环找到它结果,同时减少了使用的内存空间classSolution(object):deftwoSum(self,nums,target):""":typenums:List[int]:type目标:int:rtype:List[int]"""result={}forindex,枚举值(nums):t=target-valuej=result.get(t)ifjisnotNoneandindex!=j:rreturn[index,j]result[value]=索引算法复杂度O(n),空间复杂度O(n)
