Python练习之列表两数之和

发布时间:2024年01月04日
列表两数之和
给定一个已按照非递减顺序排列的整数数组numbers,请你从数组中找出两个数满足相加之和等于target
函数应该以长度为2的整数数组的形式返回这两个数的下标值。numnbers的下标值从1开始,所以答案数组应当满足1<=answer[0]<answer[0]<=numbers.length
你可以假设每个输入只对应唯一的答案而且你不可以重复使用相同的元素
示例:
输入:numbers=[2,7,11,15],target=9
输出:[1,2]

提示:

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('---------------')

文章来源:https://blog.csdn.net/2202_75561400/article/details/135381789
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。