leetcode 1. TwoSum 两数之和 python3

LeetCode刷题之Two Sum
本文记录了作者作为编程新手在LeetCode上解决Two Sum问题的过程,分享了四种不同的解题思路及代码实现,包括暴力破解、使用set、哈希表dict以及优化后的哈希表方法。

写在前边:

本人编程小白自此开启leetcode刷题之旅,计划每日一题。

第一遍会尝试自己动手写,同时输出博客,第二刷的时候会按照博客里的后续优化继续输出代码。任何问题请大家批评指正。


时间:2020-5-09

题目地址:力扣

题目难度:Easy

题目描述:

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]


思路1:暴力破解

代码段1:通过

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        result = []
        for i in nums:    
            temp = nums.index(i) + 1 
            for j in nums[temp:]:
                if i + j == target:
                    r1 = nums.index(i)
                    r2 = nums[temp:].index(j) + 1 + r1
                    result.append(r1)
                    result.append(r2)
                    return result    

结果:通过

总结:第一次用leetcode刷题,不太熟悉套路,应当对自己的代码输出多找几个测试case


思路2:使用set

代码段2:通过

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(0, len(nums)):
            set1 = nums[i+1:]
            _temp = target - nums[i]
            if(_temp in set1):
                return([i, nums[i+1:].index(_temp) + i + 1])

总结:

  1. 查找的时候使用set去重,并且是在是从i之后加入set,防止重复使用同一个数

思路3:使用哈希表dict

代码段3:通过

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dict1 = {}
        for i, element in enumerate(nums):
            dict1[element]  = i
        for j, element in enumerate(nums):
            temp = dict1.get(target - element)
            if temp != j and temp is not None:
                return [j, temp]

总结:

  1. enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。enumerate(sequence, [start=0]) sequence -- 一个序列、迭代器或其他支持迭代对象。start -- 下标起始位置。

思路4:使用哈希表dict,但是在element之前找,省去了循环、重复和target-num=num的判断

代码段4:通过

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dict1 = {}
        for i, element in enumerate(nums):
            if dict1.get(target - element) is not None:
                return [dict1.get(target - element), i]
            dict1[element] = i

总结:

  1. 哈希表真香
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值