LeetCode两数之和

LeetCode两数之和

题目:找出列表中两元素相加结果为目标结果的两元素的索引
解法:3种
推荐:方法3
语言:python

题目介绍如下:
两数之和

题目通俗说明:

给定一个整数列表和一个目标值,将列表中两元素之和等于目标值的元素的索引找到后,用列表返回

解法如下:

# author:铁臂阿童木

# datetime:2022/1/31 10:31

# software: PyCharm


# 题目:两数之和
# 解法:3种
# 推荐:方法3

# 先定义两对条件列表
nums1 = [2,7,11,15]
target1 = 9
# 返回类型为列表

nums2 = [3,2,4]
target2 = 6

# 序号:方法一
# 方法:双指针法
# 思想:固定一个位置的指针,让另一个指针从它后一位开始循环,对指向的两个值进行相加判断符合就返回列表形式的下标,
#      否则就判断j指针是否处于最后一位,如果是就让固定指针前进1位,不是就对j指针继续加一位循环
# 优点:方法简单
# 缺点:耗时
def twoSum(nums,target):
    i = 0
    j = 1
    while j < len(nums):
        if nums[j] == target - nums[i]:
            return [i,j]
        else:
            if j == len(nums)-1:    # 判断j指针是否处于最后一位
                i += 1
                j = i+1
                continue
            j += 1

# print(twoSum(nums2,6))


# 序号:方法二
# 方法:循环判断法
# 思想:对i进行循环,每次对target-nums[i]的值是否在此元素之后的列表中进行判断,如果存在就找到它的索引,直接输出这两个元素的索引,如果不存在继续对i循环
# 优点:代码简洁
# 缺点:耗时
def twoSum2(nums,target):
    i = 0
    while i < len(nums)-1:     # 让其循环到列表的倒数第二位即可
        if target - nums[i] in nums[i+1:]:    # 判断要找的值是否在此元素之后的列表中
            j = nums.index(target - nums[i],i+1,len(nums))    # 找到要找的值的索引
            return [i,j]
        i += 1

# print(twoSum2(nums2,6))


# 序号:方法三
# 方法:hash表查找法
# 思想:每次枚举循环列表的索引和元素,并且在hash表中查找是否有target-当前元素值的结果,如果有就返回当前值和找到值的索引,如果没有就将此次值添加的hash表中
# 优点:速度快
# 缺点:
def twoSum3(nums,target):
    hashTable = dict()
    for i,num in enumerate(nums):    # 利用枚举遍历每个元素的索引和元素
        if target - num in hashTable:
            return [hashTable[target-num],i]
        hashTable[nums[i]] = i

print(twoSum3(nums2,6))


经验:

如果自己编写中出现错误,就针对简单示例数据进行测试,使用编译器的调试工具打断点测试!

个人心得

1.尽量少用循环,速度太慢
2.多考虑哈希表(字典)

感谢阅读!!!
有错误请您指出!!!
欢迎补充!!!

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值