1. 两数之和(哈希表和暴力枚举)

两数之和

方式一:哈希表,用最少的时间和空间复杂度

  • 基础知识:enumuerate:返回一个带有下标和数值的字典,字典的使用dict[index]=index所代表的值。
    还有另外一种字典的创建方式: hashtable = dict(),或者 dct = {}
  • 解题思路:首先赋值一个空字典,查看字典中有无target-n的值,如果没有,将n所在的赋值给空字典。
    (这里又有一个关键思路:题目要求返回的是所在的index,但是字典只能提取出值,使用dct[n] = i。)
    (因为字典是空的,所以第一次相当于赋值的作用,赋值之后查找元素在不在字典中)
def two_sum(nums, target):
    """这样写更直观,遍历列表同时查字典"""
    dct = {}
    for i, n in enumerate(nums):
        cp = target - n
        if cp in dct:
            return [dct[cp], i]
        else:
            dct[n] = i

test = two_sum([1,3,4,5,6],5)
print(test)

方式二:暴力枚举

  • 1.基础知识:
    1.类当中一定会有实例变量(相当于只要使用了类一定要进行属性的初始化)
    2.在方法的调用中,首先创建一个实例变量调用初始化函数,之后通过实例变量调用类方法
  • 2.思路:一个一个查找
class Solution:
    def __init__(self, nums, target):
        self.nums = nums
        self.target = target
    def twoSum(self):
        n = len(self.nums)
        for i in range(n):
            for j in range(i + 1, n):
                if self.nums[i] + self.nums[j] == self.target:
                    return [i, j]
        return []

solution = Solution([1,3,4,5,6],5)
print(solution.twoSum())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liqianjiqiren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值