[LK]1.两数之和

提示:本文章为力扣题目的练习记录,如有侵权,请联系作者删除。

前言

最近开始刷力扣的算法题了,每次刷完来这里复盘一下。使用的语言是python,思路仅做参考。


一、题目要求

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum

二、输入输出示例

1.示例1

输入:nums = [2,7,11,15], target = 9
输出:[0,1]

2.示例2

输入:nums = [3,2,4], target = 6
输出:[1,2]

三、解决方案

1.暴力求解法

最容易想到的方法,实现方法如下。时间复杂度为O(n^2),空间复杂度为O(1)。

class Solution(object):
    def twoSum(self, nums, target):
        out=[]
        for i in range(0,len(nums)):
           for j in range(0,len(nums)):
               if j>i:
                   if nums[i]+nums[j]==target:
                       out.append(i)
                       out.append(j)
        return out

2.哈希表法

是一种优化搜索方法。在哈希表中存放按时未能符合要求的数字,可以将其想象成人脑的记忆功能。

比如,输入nums = [2,15,11,7,56], target = 9,只看第一个数,肯定不知道第几个数和第几个数相加等于9,因为你此时只拥有一个数字,先把这个数字记住。再往下看第二个数,发现15和记忆中的2相加不满足条件,把15放进记忆中,再往下看。第三个数和记忆中的2和15相加都不满足条件,再把11放入记忆。第四个数,7和记忆中的2相加等于9,解就找到了。

这种方法的时间复杂度是O(n),空间复杂度是O(n),跟暴力枚举的方法相比,是典型的以空间换时间的策略。

class Solution(object):
    def twoSum(self,nums, target):
        out=[]
        haxi=[]
        for i in range(0,len(nums)):
            if target-nums[i] in haxi:
                out.append(i)
                out.append(haxi.index(target-nums[i]))
            else:
                haxi.append(nums[i])     
        return out

四、总结

通过提交结果来看,第二种方法所用的时间不到第一种的1/10,空间资源使用相差不多。因此更推荐第二种搜索策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值