1. Two Sum

题目链接:two-num
 思路一:两层for循环暴力求解,结果超时
1 def twoSum(nums,target):#使用二维数组
2     for i in range(len(nums)):
3         for j in np.arange(i+1,len(nums)):
4             if(nums[i] + nums[j] == target):
5                 return [i,j]

思路二:考虑一层for循环,其他的靠python的内置函数解决。问题关键是求解target - num是否在list里面,在的话找到位置,要注意num1和num2是同一个元素的例外情况。

复制代码
def twoSum(nums,target):
    j = -1
    for i in range(len(nums)):
        if (target - nums[i]) in nums:
            if(nums.count(target - nums[i]) == 1) & (target - nums[i] == nums[i]):
                continue
            else:
                j = nums.index(target - nums[i],i+1)
                break
    if j > 0:
        return [i,j]
    else:
        return []
复制代码

思路三:解题思路是在方法一的基础上,优化解法。想着,num2 的查找并不需要每次从 nums 查找一遍,只需要从 num1 位置之前或之后查找即可。但为了方便 index 这里选择从 num1 位置之前查找

复制代码
1 def twoSum2(nums,target):
2     j = -1
3     for i in range(1,len(nums)):
4         temp = nums[:i]
5         if (target - nums[i]) in temp:
6             j = nums.index(target - nums[i])
7             break
8     if j >= 0:
9         return [j,i]
复制代码

思路四:通过哈希来求解,这里通过字典来模拟哈希查询的过程。

个人理解这种办法相较于方法一其实就是字典记录了 num1 和 num2 的值和位置,而省了再查找 num2 索引的步骤。
1 def twoSum3(nums,target):
2     hashmap = {}
3     for ind,num in enumerate(nums):
4         hashmap[num] = ind
5     for i,num in enumerate(nums):
6         j = hashmap.get(target - num)
7         if j is not None and j != i:
8             return [i,j]

思路五:类似方法三,不需要 mun2 不需要在整个 dict 中去查找。可以在 num1 之前的 dict 中查找,因此就只需要一次循环可解决。

1 def twoSum4(nums,target):
2     hashmap = {}
3     for ind,num  in enumerate(nums):
4         if hashmap.get(target - num) is not None:
5             return [hashmap.get(target - num),ind]
6         hashmap[num] = ind

参考题解

一些python函数总结

python的count函数

 

 python的index函数

 

 &和&&的区别

 

Python 中 (&,|)和(and,or)之间的区别

 

Python enumerate() 函数

 

 

 python的map函数

 

 python的字典的使用

 

 

 

 

 

 

 
posted @   你的雷哥  阅读(191)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示