Python练手程序-06

本文详细解析了经典的“两数之和”问题,通过两种不同的算法思路展示了解决方案。首先介绍了简单直接但效率较低的双层循环方法,接着提出了一种利用哈希表优化查找过程的高效算法,该算法仅需一次遍历即可找到满足条件的两个数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题描述

1.1 原文描述:

    Given an array of integers, return indices of the two numbers such that they add up to a specific target.
    You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

1.2 中文描述:

    给定一个数组,如果数组中的两个元素之和等于给定的目标,那么返回数组中这两个元素的下标。
    假定每个输入数组都有一个确定的输出,并且,同一个元素不能用两次;
    也就是说,如果给定数为8,不能用4加两次得到。

实例:

数组: nums = [2, 7, 11, 15]
目标值:9
因为:nums[0] + nums[1] = 2 + 7 = 9
返回:[0, 1]

2、解题思路

2.1 解题1

​ 一般我们第一时间就能想到的思路,就是用双重for循环来遍历一遍,肯定可以得到结果;

循环1:元素1 in 数组
    循环2:元素2 in 数组
        判断:元素1与元素2不是同一个元素 and 它们之和等于目标值:
            返回元素1和元素2的下标

2.2 解题2

​ 双重for循环会浪费时间和空间,并且有这样的一个缺点,就是已经计算过的值,并不会保存,每一次的计算,与前面的计算没有关系,如果我们每一次计算都能利用前面计算的结果,那么效率应该会提高。

创建一个容器:buff  #使用buff存储下标和目标值与当前值的差值
循环: 元素 in 数组
    判断: 如果当前值在容器中存在
        返回:容器中的值下标,当前下标
    判断: 不存在
        将当前值得下标与(目标值-当前值)存储倒容器中

​ 实际上,这里利用了一个缓冲容器的思路,将差值作为键,下标作为值存储到字典中,那么实际上我们只需要用一层循环就可以了,每一次都将前面元素的差值存储,那么每遇到一个元素,判断一下这个值在是不是在字典中,如果在,那么这个值与字典中的下标所代表的值之和肯定就是目标值,时间复杂度是O(n)。

3、参考代码

Python版本:3
class Solution(object):
    def twoSum(self, nums, target):
        buff_dict = {}
        for i in range(len(nums)):
            if nums[i] in buff_dict:
                return [buff_dict[nums[i]], i]
            else:
                buff_dict[target - nums[i]] = i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值