题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素

举例

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

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

思路及难点

第一次刷数据结构相关的题目,老实说,内心还是有点小激动的。看到题目第一反应,就是暴力法,直接两个for循环就可以解决。

但想着还是要有点挑战才好,要把时间复杂度降到O(n)才有成就感。直觉应该要用到哈希表辅助才行。

分三种情况:

  • 两个数及它们的差都不同
  • 三个数中有两个相同
  • 三个数都相同

第一种解法我是先保存哈希,然后再对差是否在哈希中做判断,导致多了几个额外的判断逻辑,不够简洁。解法如下:

class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
record = {} for index,num in enumerate(nums):
diff = target - num if num in record:
l = record[num]
l.append(index)
record[num] = l
else:
record[num] = [index] if diff in record and record[diff][0]!=index:
return[record[diff][0],index]

第二种解决我是参考了Java的解法想到的,在Java中map中的key也是不能重复的(我原以为是可以的,真是低级错误!:),将先判断的逻辑提前,居然可以精减到只用6行代码解决。python果然是够方便的。

class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
record = {} for index,num in enumerate(nums):
diff = target - num if diff in record :
return[record[diff],index] record[num] = index

总结

小小的一道题目,原以为相对简单,一但有了性能上的要求,也花了我近1个半小时。看来理论知识再多,也还是需要手动敲代码啊。

通过手动编程,很多模糊的想法才能清晰起来。最好能先在纸上先列几个边界例子,手动算算。再将想法写成代码,一开始不用直奔简洁。

先通过单元测试,然后再考虑怎么把代码写得漂亮!

最新文章

  1. Html,Css,Dom,javascript细节总结
  2. eclipse自动提示功能没了的解决办法(转载)
  3. 集合 ArrayList
  4. Orchard源码分析(7.2):Controller相关
  5. iOS开发拓展篇—CoreLocation地理编码
  6. LVS集群类型
  7. Log4j配置说明及样例
  8. Spring的lookup-method标签
  9. 水题 ZOJ 3876 May Day Holiday
  10. .Net 使用文件上传控件FileUpload上传图片
  11. 非root模式下安装mysql
  12. ACM/ICPC ZOJ1009-Enigma 解题代码
  13. 使用nc传输文件和目录【转】
  14. js上课笔记
  15. build.gradle文件的注释
  16. Vim——回顾整理
  17. DotNetBar滚动条的疑似BUG
  18. [No0000183]Parallel Programming with .NET-How PLINQ processes an IEnumerable<T> on multiple cores
  19. linux防火墙使用以及配置
  20. Android开发之对ListView的数据进行排序

热门文章

  1. UCOS阅读问题累积
  2. RBG颜色对照表:有网址
  3. DZNSegmentedControl和XLForm联合使用
  4. Spring知识点小结汇总
  5. centos7安装ftp
  6. ps命令 百度+加自己的理解
  7. css中三种隐藏方式
  8. 微信支付tp5.1集合
  9. 用Python生成词云
  10. 解决WinScp连接被拒绝的问题