跳转至

返回列表中两个数的和等于目标值的索引


限制条件: 列表中的数字可以重复, 但返回的索引不能重复

方法1:

def demo(array: list, target: int):
    # 遍历列表
    for index, value in enumerate(array):
        # 求差值
        tmp = target - value
        # 排除索引重复的情况
        if tmp == value and array.count(value) == 1:
            continue
        # 如果差值也在列表中直接返回结果
        if tmp in array and tmp != value:
            return [index, array.index(tmp)]
        # 如果差值也在列表中但与当前值相等
        # 要取后面的差值的索引并加上偏移量 index+1
        if tmp in array:
            return [index, array[index + 1 :].index(tmp) + index + 1]

方法2:

def demo(array, target):
    # 存放数字(key)和索引(value)的字典
    mydict = {}
    # 遍历列表
    for index, value in enumerate(array):
        # 求差值
        tmp = target - value
        # 如果字典里存在该差值则直接返回索引
        if mydict.get(tmp) is not None:
            return [mydict[tmp], index]
        # 否则放入字典
        mydict[value] = index

输出:

if __name__ == '__main__':
    li = [2, 7, 11, 15]
    print(demo(li, 9))

    li = [2, 7, 11, 15]
    print(demo(li, 26))

    li = [3, 2, 4]
    print(demo(li, 6))

    li = [3, 2, 3]
    print(demo(li, 6))

    li = [3, 3]
    print(demo(li, 6))

    li = [5, 6, 4, 1, 4]
    print(demo(li, 8))

[0, 1] [2, 3] [1, 2] [0, 2] [0, 1] [2, 4]