Python练习之列表两数之和

列表两数之和
给定一个已按照非递减顺序排列的整数数组numbers,请你从数组中找出两个数满足相加之和等于target
函数应该以长度为2的整数数组的形式返回这两个数的下标值。numnbers的下标值从1开始,所以答案数组应当满足1<=answer[0] 
  

提示:

1,numbers按照非递减顺序排列

2,仅存在一个有效答案

3,2<= numbers.length 

import time


class Solution(object):
    @staticmethod  # 修饰
    def twosum(numbers, target):  # 定义函数并传递参数
        d = {}  # 空字典
        size = 0  # 索引
        while size < len(numbers):  # 如果索引小于列表长度,控制迭代范围
            if not numbers[size] in d:  # 确保无重复元素,如果字典中没有则添加
                d[numbers[size]] = size + 1  # 按次向字典中添加key和value,字典的key是列表参数中的元素,value是元素在列表中的位置
                print('d=', d) # 打印当前字典
            print('target - numbers[size]=', target - numbers[size], 'size=', size)  # 打印当前差值及元素在列表中的位置
            if target - numbers[size] in d:  # 如果 差(target - numbers[size])在字典中
                if d[target - numbers[size]] < size + 1:  # 确认位置数据在有效区间,找到的数据在目前的数据位置(size+1)之前,因为是先添加的数据及位置,
                    """
                     避免出现一下情况:
                     输入:ns = [2, 11, 7, 15] target = 22
                     输出:[2,2]
                     """
                    answer = [d[target - numbers[size]], size + 1]  # 通过差值及字典找到第一个数的位置信息,size+1直接找到第二数的位置
                    return answer  # 返回列表
            size = size + 1
            time.sleep(1)


ns = [2, 11, 7, 15]  # 列表
tg = 9  # 目标和
st = Solution()
print(f'{tg}:',st.twosum(ns, tg))
print('---------------')

你可能感兴趣的:(算法,数据结构,python)