首页 > 试题广场 >

两数之和

[编程题]两数之和
  • 热度指数:401430 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)

数据范围:
要求:空间复杂度 ,时间复杂度
示例1

输入

[3,2,4],6

输出

[2,3]

说明

因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]            
示例2

输入

[20,70,110,150],90

输出

[1,2]

说明

20+70=90     
#

# @param numbers int整型一维数组 
# @param target int整型 
# @return int整型一维数组
#
class Solution:
    def twoSum(self , numbers , target ):
        
        # write code here
        for i in range(len(numbers)):
            if numbers[i]<=target:
                for y in range(i+1,len(numbers)):
                    if numbers[i]+numbers[y]==target:
                        return [i+1,y+1]
            else:
                continue
                
发表于 2022-08-08 15:46:50 回复(0)
"""
python 的哈希表法:
用一个dict来存储target - numbers[i]以及当前的i序列号
"""
class Solution:
    def twoSum(self , numbers: List[int], target: int) -> List[int]:
        dic = dict()    # 
        res = []
        for i in range(len(numbers)):
            if (target - numbers[i]) not in dic.keys():
                dic[numbers[i]] = i
            else:
                res.append(dic[target - numbers[i]]+1)
                res.append(i+1)
                return res
        return 
发表于 2022-01-09 16:03:00 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        map = {}
        for idx,val in enumerate(numbers):
          if target - val in map:
            return [map[target - val], idx + 1]
          map[val] = idx + 1

发表于 2021-07-10 10:53:59 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        passed =[]
        for i in range(len(numbers)):
            if target-numbers[i] in passed:
                return [passed.index(target-numbers[i])+1,i+1]
            else:
                passed.append(numbers[i])
        return []
从左往右依次检查数字是否满足答案,不满足的放入候选里和当前i进行比较
发表于 2021-06-15 20:01:11 回复(0)
class Solution:
    def twoSum(self, numbers, target):
        arr = []
        for i in range(len(numbers)):
            if target - numbers[i] in numbers:
                arr.append(i + 1)
        if len(arr) % 2 != 0:
            for i in range(len(arr)):
                if target - numbers[arr[i] - 1] == numbers[arr[i] - 1]:
                    temp = i
            arr.pop(temp)
        return arr
1.核心思想就是将a+b=c转化为c-b=a,查找a是否存在列表中;
2.因为解是唯一的,列表长度一定是偶数,排除a=b即c=2a带来的奇数解;
发表于 2021-06-05 17:44:09 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        j = -1
        lens = len(numbers)
        for i in range(1, lens):
            temp = numbers[:i]
            if (target - numbers[i]) in temp:
                j = temp.index(target - numbers[i])
                break
        if j >= 0:
            return [j+1, i+1]

发表于 2021-06-04 21:16:29 回复(0)
class Solution:
    def twoSum(self , n , t):
        # write code here
        l = len(n)
        d = {}
        for i in range(l):
            if n[i] in d:
                continue
            else:
                d[n[i]] = i
        for i in range(l):
            a = t-n[i]
            if (a in d) and d[a] != i:
                j = d[a]
                return [min(i, j)+1, max(i, j)+1]
        return -1

发表于 2021-05-10 15:57:49 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        res = []
        for i in range(len(numbers)):
            res.append(i+1)
            rest = target-numbers[i] 
            num_r = numbers[i+1:]
            if rest in num_r:
                res.append(num_r.index(rest)+i+2)
                return res
            else:
                res = []

发表于 2021-05-06 21:14:20 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        A = dict()
        for ii, val in enumerate(numbers):
            try:
                ii2 = A[target - val]
                return [min(ii,ii2)+1, max(ii,ii2)+1]
            except:
                A[val] = ii

发表于 2021-04-28 22:54:02 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        hashmap = {}
        for i, num in enumerate(numbers):
            j = hashmap.get(num)
            if j is not None:
                return [j + 1, i + 1]
            diff = target - num
            hashmap[diff] = i

编辑于 2021-04-22 17:23:57 回复(0)
# @paramnumbers int整型一维数组
# @paramtarget int整型
# @returnint整型一维数组
#
classSolution:
    def twoSum(self , numbers , target ):
        # write code here
        for k in range(len(numbers)-1):
            for h in range(k+1,len(numbers)):
                if numbers[k]+numbers[h]==target:
                    return [k+1,h+1]
虽然没有获得时间复杂度的得分点,用了2个for循环,但是贵在简单,4行代码足矣。
编辑于 2021-04-19 23:36:28 回复(0)

class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        for i in range(len(numbers)):
            for j in range(i+1,len(numbers)):
                if numbers[i] + numbers[j] == target:
                    list1 = [i+1,j+1]
                    list1.sort()
                    return list1
        return []

发表于 2021-04-09 16:25:43 回复(0)
可从两头操作。
#
# 
# @param numbers int整型一维数组 
# @param target int整型 
# @return int整型一维数组
#
class Solution:
    def twoSum(self , numbers , target ):
        a=numbers.copy()
        numbers.sort()
        i,j=0,len(numbers)-1
        while i<j:
            s=numbers[i]+numbers[j]
            if s>target:
                j-=1
            elif s<target:
                i+=1
            else:
                if numbers[i]==numbers[j]:
                    k=numbers[i]
                    ind=[j for j,x in enumerate(a) if x==k]
                    return [ind[0]+1,ind[1]+1]
                else:
                    res=[a.index(numbers[i])+1,a.index(numbers[j])+1]
                    return res if res[0]<res[1] else res[::-1]
                    
        return []
        # write code here


发表于 2021-04-07 15:42:12 回复(0)
#
# 利用目标和减去其中一个值,在数组中遍历去寻找这个值
# @param numbers int整型一维数组 
# @param target int整型 
# @return int整型一维数组
#
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        if len(numbers)<2:
            return False
        length=len(numbers)
        for i in range(length-1):
            a=target-numbers[i]
            for j in range(i+1,length):
                if numbers[j]==a:
                    return i+1,j+1
        return None

发表于 2021-04-07 14:33:33 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        res = []
        for x in range(0,len(numbers)):
            if numbers[x]<=target and numbers.count(target-numbers[x])!=0 and numbers[x]!=target/2:
                res.append(x+1)
                res.append(numbers.index(target-numbers[x])+1)
                break
            elif x==target/2 and numbers.count(target-x)>=2:
                for y in  range(0,len(numbers)):
                    if numbers[y] == target/2 and y!=x:
                        res.append(x+1)
                        res.append(y+1)
                        break
        res.sort()
        return res
发表于 2021-04-06 22:05:00 回复(0)
#

# @param numbers int整型一维数组 
# @param target int整型 
# @return int整型一维数组
#
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        for i in range(len(numbers)-1):
            for j in range(i+1, len(numbers)):
                if (numbers[i] + numbers[j]) == target:
                    return [i+1, j+1]
                
                
发表于 2021-04-04 10:19:13 回复(0)
class Solution:
    def twoSum(self , numbers , target):
        # write code here
        assert isinstance(numbers, list)
        assert isinstance(target, int)
        for i, n1 in enumerate(numbers):
            if i == len(numbers) - 1:
                return None
            for j, n2 in enumerate(numbers[i+1:]):
                if (n1 + n2) == target:
                    return [i+1,j+i+2]
发表于 2021-03-30 16:28:33 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        dct = {}
        
        for i in range(1, len(numbers)+1):
            if numbers[i-1] in dct:
                return [dct[numbers[i-1]], i]
            dct[target-numbers[i-1]] = i
        
        return False

发表于 2021-03-28 20:53:49 回复(0)
#初中生的笨比解答
class Solution:
    def twoSum(self , numbers , target ):
        # write code here
        sul = [];ok = 0
        for i in range(0,len(numbers)):
            for j in range(i+1,len(numbers)):
                if numbers[i] + numbers[j] == target:
                    if i+1 <= j+1:
                        sul.append(i+1);sul.append(j+1)
                    elif j+1 > i+1:
                        sul.append(j+1);sul.append(i+1)
                    return sul
发表于 2021-03-28 20:12:05 回复(0)
class Solution:
    def twoSum(self , numbers , target ):
        dic = {}
    
        for i,val in enumerate(numbers):
            if target-val not in dic:
                dic[val] = i+1
            else:
                return [dic[target-val],i+1]

发表于 2021-03-05 23:44:29 回复(0)

问题信息

难度:
31条回答 78129浏览

热门推荐

通过挑战的用户