TwoSum,两数之和

Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.Example:Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,

介绍从O(n^2)到O(nlogn)再到O(n)的三种算法

第一种双针模型,蛮力算法:

# 双针模型,蛮力算法,时间复杂度O(n^2)
def twoSum_two_pointer(arr,target):n = len(arr)# i为第一个数的位置,j为第二个数的位置for i in range(n-1):rest = target - arr[i]for j in range(i+1,n):if arr[j] == rest:return True,[arr[i],rest]return False

第二种基于排序的二分查找:

# 利用有序的数组,寻找第二个数时,可以使用二分查找法为logn,整个时间复杂度为O(nlogn)
def twoSum_sorted_binary_Serach(arr,target):n = len(arr)# 排序O(nlogn)arr = sorted(arr)# 二分查找,logndef binary_Serach_recursive(arr,left,right,target):middle = (left + right) // 2# 递归出口if left > right :return Falseif arr[middle] == target:return Trueelif arr[middle] < target:# 这里没有return的话,结果就没法return出来return binary_Serach_recursive(arr,middle+1,right,target)else:return binary_Serach_recursive(arr,left,middle-1,target)# 遍历第一个数,查询第二个数for i in range(n-1):rest = target - arr[i]if binary_Serach_recursive(arr,i+1,n-1,rest):return True,[arr[i],rest]return False

第三种基于哈希的查找:

# python里面set使用的是哈希方式实现,查找时间复杂度O(1),整体时间复杂度O(n)
def twoSum_hash(arr,target):n = len(arr)# 哈希表visit = set()# 遍历第一个数,需要遍历n个,查询第二个数是否在哈希表里for i in range(n):rest = target - arr[i]if rest in visit:return True,[arr[i],rest]# 假如这个数不再哈希表里,就添加到哈希表里面,这种操作步骤,已经保证# 任意两个数都组合过# 当遇到ab比较,ba就没必要比较时,指针对应的就是i,j =i+1,而在哈希里,对应的# 就是逐步加入元素visit.add(arr[i])return False

结果

arr = [16,7,8,44,2,4,5,97,5,3]
print(twoSum_hash(arr,100))
print(twoSum_two_pointer(arr,100))
print(twoSum_sorted_binary_Serach(arr,100))runfile('D:/share/test/two_sum.py', wdir='D:/share/test')
(True, [3, 97])
(True, [97, 3])
(True, [3, 97])

TwoSum,从O(n^2)到O(nlogn)再到O(n)相关推荐

  1. 彻底搞懂递归的时间复杂度

    笔者编码10载,面过很多程序员简历上写着熟悉数据结构和算法,但是对于时间复杂度稍微深入点的问题,都回答的不怎么样,其实还是没懂 搞懂算法时间复杂度是一个优先程序员的分水岭 先来看letcode一道题, ...

  2. 最大子段和问题算法设计(C语言)

    编译环境:Dev-C++ 分别用暴力枚举,优化枚举,递归分治和动态规划的方法解决最大字段和问题. 最大字段和问题描述: 给定n个整数(可能为负整数)组成的序列a1,a2,-,an,求该序列连续的子序列 ...

  3. Codeforces Round #411 (Div. 2) A-F

    比赛时候切了A-E,fst了A Standings第一页只有三个人挂了A题,而我就是其中之一,真™开心啊蛤蛤蛤 A. Fake NP time limit per test 1 second memo ...

  4. 最长连续子序列nlogn算法

    最长上升子序列(LIS)长度的O(nlogn)算法 标签: 算法search优化存储 2012-04-18 19:38 14031人阅读 评论(5) 收藏 举报  分类: 资料学习(15)  解题报告 ...

  5. CF510D Fox And Jumping(动态规划转换为最短路,O(n^2×2^9) -> O(nlogn),裴蜀定理应用)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 以下内容摘自 我的文章:算法竞赛中的数论问题 - 数论全家桶(信奥 / 数竞 / ACM)作者孟繁宇, ...

  6. 时间复杂度,O(1), O(n), O(logn), O(nlogn) 的区别+样例分析

    在描述算法复杂度时,经常用到O(1),O(n),O(logn),O(nlogn)O(1), O(n), O(logn), O(nlogn)O(1),O(n),O(logn),O(nlogn)来表示对应 ...

  7. 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)

    目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...

  8. SGU 332 Largest Circle(凸包内接圆半径nlogn)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=332 题意:逆时针给出一个凸包,给凸包的最大内接圆半径. 思路:nlogn的算法: ...

  9. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

最新文章

  1. 企业级IT运维平台的发展趋势与规划要点
  2. ./configure,make,make install的作用
  3. JZOJ 5630. 【NOI2018模拟4.4】Connection
  4. iPhone 史上最大优惠;摩拜「裁员门」反转;百度网盘缩减空间 | 极客头条
  5. Vue.js 学习笔记 一
  6. 半平面交总结and模板
  7. 1970年代宇航员在月球上生活,如何实现电力供应
  8. Mac 如何安装tomcat
  9. 人脸识别活体检测测试案例
  10. HTML自动弹出窗口代码
  11. 小程序与MySQL数据库的交互_微信小程序与服务器的交互原理
  12. 大数据之Kafka介绍
  13. 徐思201771010132《面向对象程序设计(java)》第四周学习总结
  14. python翻页爬取豆瓣影评_Python3爬取豆瓣电影
  15. lan和adsl是什么信号_光纤、以太网、ADSL上网有什么区别?
  16. sgu244:Height, Bisector and Median(几何)
  17. 最新接单抢单系统返利+资金盘+区块链自动抢单系统源码
  18. 对RGB三个通道进行操作示例
  19. 什么是NFT?你不会还不知道吧!
  20. WINDOS服务器安全设置

热门文章

  1. 3g无线图传点到点模式与服务器模式比较,RTK网络模式分类及网络制式的选择
  2. java 下载二进制文件_使用Java从Github下载二进制文件
  3. android tv 开发布局,Android TV开发总结(七)构建一个TV app中的剧集列表控件
  4. 阶乘之和计算_利用MULTINOMIAL函数计算参数和的阶乘与各参数阶乘乘积的比 值
  5. macos big sur升级失败_【王牌出击】升级欲望更为强烈 斯旺西有望反客为主
  6. unipapp 解决无法编译sass_如何解决Vue项目里面没有sassloader依赖包的问题
  7. sql的加减乘除运算_实现四则运算的一条sql语句
  8. php 获取下拉框选中的文本,jQuery如何获取select选择的文本与值?(代码示例)...
  9. 创建多线程_你真的了解多线程吗?
  10. 一个傻瓜式构建可视化 web的 Python 神器