作者 | 程序员小吴

来源 | 五分钟学算法(ID: CXYxiaowu)

导语:今天分享一个开源项目,里面汇总了程序员技术面试时需要了解的算法和数据结构知识,并且还提供了相应的代码,目前 GitHub 上标星 35000 star,值得一看。

你可以把这个项目的内容当成是一个目录,在面试前快速浏览一遍对你的面试也是有所帮助的!

GitHub 地址:

https://github.com/kdn251/interviews

一、数据结构

  • 栈是元素的集合,其包含了两个基本操作:push 操作可以用于将元素压入栈,pop 操作可以将栈顶元素移除。

  • 遵循后入先出(LIFO)原则。

  • 时间复杂度:

  • 索引: O(n)

  • 搜索: O(n)

  • 插入: O(1)

  • 移除: O(1)

链表

  • 链表即是由节点组成的线性集合,每个节点可以利用指针指向其他节点。它是一种包含了多个节点的、能够用于表示序列的数据结构。

  • 单向链表: 链表中的节点仅指向下一个节点,并且最后一个节点指向空。

  • 双向链表: 其中每个节点具有两个指针 p、n,使得 p 指向先前节点并且 n 指向下一个节点,最后一个节点的 n 指针指向 null。

  • 循环链表:每个节点指向下一个节点并且最后一个节点指向第一个节点的链表。

  • 时间复杂度:

  • 索引: O(n)

  • 搜索: O(n)

  • 插入: O(1)

  • 移除: O(1)

队列

  • 队列是元素的集合,其包含了两个基本操作:enqueue 操作可以用于将元素插入到队列中,而 dequeue 操作则是将元素从队列中移除。

  • 遵循先入先出原则 (FIFO)。

  • 时间复杂度:

  • 索引: O(n)

  • 搜索: O(n)

  • 插入: O(1)

  • 移除: O(1)

二叉查找树

  • 二叉搜索树(BST)是一种特殊的二叉树,其任何节点中的值都会大于或者等于其左子树中存储的值并且小于或者等于其右子树中存储的值。

  • 时间复杂度:

  • 索引: O(log(n))

  • 搜索: O(log(n))

  • 插入: O(log(n))

  • 删除: O(log(n))

字典树

字典树,又称基数树或者前缀树,能够用于存储键为字符串的动态集合或者关联数组的搜索树。树中的节点并没有直接存储关联键值,而是该节点在树中的挂载位置决定了其关联键值。某个节点的所有子节点都拥有相同的前缀,整棵树的根节点则是空字符串。


线段树

  • 线段树是用于存放间隔或者线段的树形数据结构,它允许快速的查找某一个节点在若干条线段中出现的次数.

  • 时间复杂度:

  • 区间查询: O(log(n))

  • 更新: O(log(n))


哈希


  • 哈希能够将任意长度的数据映射到固定长度的数据。哈希函数返回的即是哈希值,如果两个不同的键得到相同的哈希值,即将这种现象称为碰撞。

  • Hash Map: Hash Map 是一种能够建立起键与值之间关系的数据结构,Hash Map 能够使用哈希函数将键转化为桶或者槽中的下标,从而优化对于目标值的搜索速度。

  • 碰撞解决

  • 链地址法(Separate Chaining): 链地址法中,每个桶是相互独立的,包含了一系列索引的列表。搜索操作的时间复杂度即是搜索桶的时间(固定时间)与遍历列表的时间之和。

  • 开地址法(Open Addressing): 在开地址法中,当插入新值时,会判断该值对应的哈希桶是否存在,如果存在则根据某种算法依次选择下一个可能的位置,直到找到一个尚未被占用的地址。所谓开地址法也是指某个元素的位置并不永远由其哈希值决定。

  • 图是一种数据元素间为多对多关系的数据结构,加上一组基本操作构成的抽象数据类型。

  • 无向图(Undirected Graph): 无向图具有对称的邻接矩阵,因此如果存在某条从节点 u 到节点 v 的边,反之从 v 到 u 的边也存在。

  • 有向图(Directed Graph): 有向图的邻接矩阵是非对称的,即如果存在从 u 到 v 的边并不意味着一定存在从 v 到 u 的边。



  • 堆是一种特殊的基于树的满足某些特性的数据结构,整个堆中的所有父子节点的键值都会满足相同的排序条件。堆更准确地可以分为最大堆与最小堆,在最大堆中,父节点的键值永远大于或者等于子节点的值,并且整个堆中的最大值存储于根节点;而最小堆中,父节点的键值永远小于或者等于其子节点的键值,并且整个堆中的最小值存储于根节点。

  • 时间复杂度:

  • 访问最大值 / 最小值: O(1)

  • 插入: O(log(n))

  • 移除最大值 / 最小值: O(log(n))

算法

排序

归并排序

  • 归并排序是典型的分治算法,它不断地将某个数组分为两个部分,分别对左子数组与右子数组进行排序,然后将两个数组合并为新的有序数组。

  • 稳定: 是

  • 时间复杂度:

  • 最优时间: O(nlog(n))

  • 最坏时间: O(nlog(n))

  • 平均时间: O(nlog(n))

快速排序

  • 稳定: 否

  • 时间复杂度:

  • 最优时间: O(nlog(n))

  • 最坏时间: O(n^2)

  • 平均时间: O(nlog(n))


图算法

深度优先搜索

  • 深度优先算法是一种优先遍历子节点而不是回溯的算法。

  • 时间复杂度: O(|V| + |E|)


广度优先搜索

  • 广度优先搜索是优先遍历邻居节点而不是子节点的图遍历算法。

  • 时间复杂度: O(|V| + |E|)


拓扑排序

  • 拓扑排序是对于有向图节点的线性排序,如果存在某条从 u 到 v 的边,则认为 u 的下标先于 v。

  • 时间复杂度: O(|V| + |E|)

END

这个开源项目里面还推荐了一些算法练习网站、视频教程、面试宝典、Google、Facebook 等知名公司面试题及解答代码。

最后再补充一下这个开源项目的 GitHub 地址:

https://github.com/kdn251/interviews

(*本文为 AI科技大本营转载文章,转载请联系原作者)


精彩推荐

AI ProCon 2019 邀请到了亚马逊首席科学家@李沐,在大会的前一天(9.5)亲授「深度学习实训营」,通过动手实操,帮助开发者全面了解深度学习的基础知识和开发技巧。

9大技术论坛、60+主题分享,百余家企业、千余名开发者共同相约 2019 AI ProCon!技术驱动产业,聚焦技术实践,倾听大牛分享,和万千开发者共成长。5折优惠票抢购中!

社群福利

扫码添加小助手,回复:大会,加入2019 AI开发者大会福利群,每周一、三、五 更新学习资源、技术福利,还有抽奖活动~

推荐阅读

  • 从ACM班、百度到亚马逊,深度学习大牛李沐的开挂人生

  • 最前沿:堪比E=mc2,Al-GA才是实现AGI的指标性方法论

  • 1万+字原创读书笔记,机器学习的知识点全在这篇文章里

  • 开源之战

  • 别再造假数据了,来试试Faker这个库吧!

  • 国外大神制作的超棒NumPy可视化教程

  • 白话中台战略:中台是个什么鬼?

  • 伟创力回应扣押华为物资;谷歌更新图片界面;Python 3.8.0b3 发布 | 极客头条

  • 沃尔玛也要发币了,Libra忙活半天为他人做了嫁衣?

你点的每个“在看”,我都认真当成了喜欢

GitHub标星3w+的项目,全面了解算法和数据结构知识相关推荐

  1. Github | 标星3W+ ! Face Recognition世界上最简洁的人脸识别库!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :Github [人工智能资 ...

  2. Github标星3w+,热榜第一,如何用Python实现所有算法

    点击"小詹学Python",选择"星标"公众号 重磅干货,第一时间送达 大数据文摘出品 编译:周素云.蒋宝尚 学会了Python基础知识,想进阶一下,那就来点算 ...

  3. Github 标星 3w+,热榜第一,实现所有算法!

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 学会了Python基础知识,想进阶一下,那就来点算法吧!毕竟编程语言只是工具,结构算法 ...

  4. 使用Python实现所有算法!Github 标星 3w+,热榜第一

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  5. GitHub标星2.6万!Python算法新手入门大全

    今天推荐一个Python学习的干货. 几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万.这个项目主要包括两部分内容:一是各种算法的基本原理讲解,二是各 ...

  6. GitHub 标星 1.6w+,我发现了一个宝藏项目,推荐大家学习

    GitHub 标星 1.6w+,我发现了一个宝藏项目,推荐大家学习 本文链接:https://blog.csdn.net/u013486414/article/details/103274892 大家 ...

  7. GitHub标星1.6K,大佬开源的抖音项目,刷屏全网!

    点击上方"Github爱好者社区",选择星标 回复"资料",获取小编整理的一份资料 作者:GG哥 来源:GitHub爱好者社区(github_shequ) 这是 ...

  8. 【干货】Github标星1.2K,Visual Transformer 最全最新资源,包含期刊、顶会论文

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨梁定康 编辑丨极市平台 导读 给大家分享一个超全面的visua ...

  9. GitHub 标星 2.3k+,比个手势,AI 自动识别 Emoji!

    关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 转自量子位,作者圆栗子 一只手势识别 AI,怎样才算得上 (优) 秀啊? 不停地变 ...

最新文章

  1. python requests库用法_python之requests库的使用
  2. Spring Cloud 常见面试题及答案
  3. 小米手机60帧录屏_专业录屏工具,你们一定要收下
  4. php 怎么将a 转成65,详细阐述PHP环境下如何将gbk编码转成utf8格式
  5. SAP SD 模块与FI、MM的接口
  6. stm32中断优先级_关于STM32 (Cortex-M3) 中NVIC的分析(转)
  7. 四大步骤做好需求调研
  8. 安卓软件改名器_自动点击屏幕的软件有哪些?-手机自动点击软件下载
  9. 面向对象---特----性
  10. [python 学习笔记] openpyxl -- excel样式设置 冻结窗格
  11. 192.168.1.1登陆官网 登录入口
  12. Vue实现导航栏切换
  13. 《交互设计》作业-第四周
  14. json后台的一些处理方式
  15. 机器学习 第三节 第十三课
  16. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】
  17. qt制作一个画板_Qt 一个简易画板实现(Graphics View).pdf
  18. 杰理之SRRC认证【篇】
  19. 虚拟 高性能计算 ScaleMP- HPC:- PC搭建超级计算机
  20. 蓝牙智能音箱技术方案开发

热门文章

  1. iOS 开发 OC编程 数组冒泡排序.图书管理
  2. 关于SQLServer2005的学习笔记——XML的处理
  3. sql实现两张表的拷贝
  4. php更新用户数据为空,php – Instagram实时更新标签 – 获取空数据,为什么?
  5. 全球智能驾驶公司列表
  6. 我想当HTML程序员,我的理想当一名程序员
  7. [pytorch][stepbystep]在pytorch上实现卷积神经网路(CNN)的裁剪(purning)
  8. Vscode 调试 Flutter 项目
  9. 每日一题题目29:五个数字能组成多少互不重复的四位数
  10. 运行jsp时,报错404