算法工程师思维导图—数据结构与算法

卖萌屋的妹子们(划掉)作者团整理的算法工程师思维导图,求职/自我提升/查漏补缺神器。该手册一共分为数据结构与算法、数学基础、统计机器学习和深度学习四个部分。

点击这里查看具体使用指南。该手册有两种获取方式:

  • 公众号后台回复思维导图获取完整手册(Xmind脑图源文件,学习起来更方便(ง •_•)ง

  • 点击 卖萌屋@算法工程师思维导图 专辑,查看对应部分内容。

下面是数据结构与算法部分~

数据结构

    • 二维矩阵/直方图最大距形面积

      矩阵最大面积:https://leetcode-cn.com/problems/maximal-rectangle/solution/zui-da-ju-xing-by-leetcode/

      直方图dp

    • 最小栈

      https://leetcode-cn.com/problems/min-stack/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-38/

  • 链表

    • LRU:双向链表

      https://leetcode-cn.com/problems/lru-cache/Least Recently Used

    • 寻找重复数-环的入口

      https://leetcode-cn.com/problems/find-the-duplicate-number/

      快慢指针,相遇后,从头发起一个指针,按相同速度走,相遇即使环的入口

  • 并查集

    http://www.cnblogs.com/cyjb/p/UnionFindSets.html

    • 字节跳动大闯关

      https://blog.csdn.net/sinat_27705993/article/details/82053102

      求不同并查集的个数 多一个count,每union一次count就减1

    • 岛屿个数

      https://leetcode-cn.com/problems/number-of-islands/solution/dfs-bfs-bing-cha-ji-python-dai-ma-java-dai-ma-by-l/

      多开一个放0的岛

    • 二叉树前序/中序/后序

      前序:= 自顶向下

    curr=stack.pop()
    print(curr.val)
    stack.push(curr.right)
    stack.push(curr.left)
    

    中序:加一个记录

     curr = stack.pop()if curr in cache:res.append(curr.val)continue cache.add(curr)stack.append(curr.right)stack.append(curr)stack.append(curr.left)
    

    后序:同中序 = 自底向上

    • 二叉树的最近公共祖先

      三个条件满足两个就是True:1.左子树包含p1或p2 2.右子树包含p1或p2 3.自己是p1或p2

    • 二分查找树

      AVL:https://mp.weixin.qq.com/s/dYP5-fM22BgM3viWg4V44A

      为啥有了BST和AVL还需要红黑树?https://zhuanlan.zhihu.com/p/72505589

      AVL每次进行插入/删除节点的时候,几乎都会破坏平衡树的第二个规则,进而我们都需要通过左旋和右旋来进行调整,使之再次成为一颗符合要求的平衡树 如果在那种插入、删除很频繁的场景中,平衡树需要频繁着进行调整,这会使平衡树的性能大打折扣,为了解决这个问题,于是有了红黑树

    • 二叉树中的最大路径和

      https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/

    • 完全二叉树插入

      https://blog.csdn.net/psc0606/article/details/48742239

      利用完全二叉树的性质,找到要插入的位置,先判断左子树的最右结点与右子树的最右结点高度,如果相等,只需要插入到左子树即可,否则插入右子树

    • 完全二叉树节点数

      https://leetcode-cn.com/problems/count-complete-tree-nodes/solution/er-fen-cha-zhao-by-xu-yuan-shu/

  • 哈希表

    • 连续子数组和为k的倍数

      https://leetcode-cn.com/problems/continuous-subarray-sum/solution/lian-xu-de-zi-shu-zu-he-by-leetcode/

    • 和为K的子数组

      https://leetcode-cn.com/problems/subarray-sum-equals-k/

      连续区间和为K,用字典存储累计和

    • 求最长非重复字符串长度

      https://blog.csdn.net/zd_nupt/article/details/82669299

      做个hash_table表,记录每个字符的位置。碰到重复的就求两个重复字符之间的距离

    • 前缀和+哈希表

查找

  • 二分查找

    • 查找最小值/翻转点 只判断mid-right是否被翻转

    • 查找固定target 1.判断mid-right是否被翻转,找到升序的方向 2.跟升序区间的left/right和mid比看在不在,不在就搜索另一个空间

    • 存在重复,寻找最小值 当num[mid]==num[right]时,right-=1 因为左闭右开,mid和right中存在别的值 [0,1,1,1] [1,1,0,1] [1, 0, 1, 1, 1] [1, 1, 1, 1] 特殊情况下时间复杂度为O(N)

    • bug-free写法:左闭右开,先写排除中位数的逻辑

      https://www.zhihu.com/question/36132386/answer/97729337 lower/upper bound

    • 旋转数组

    • 寻找峰值

      左闭右开,往高的地方走https://leetcode-cn.com/explore/learn/card/binary-search/210/template-ii/841/

    • 寻找重复数

      https://leetcode-cn.com/problems/find-the-duplicate-number/solution/xun-zhao-zhong-fu-shu-by-leetcode/

    • 双数组中位数

      https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-w-2/

    • 找出第K小的距离对

      https://leetcode-cn.com/problems/find-k-th-smallest-pair-distance/solution/hei-ming-dan-zhong-de-sui-ji-shu-by-leetcode/

      二分查找 + 双指针

    • 阶乘函数后K个零

      https://leetcode-cn.com/problems/preimage-size-of-factorial-zeroes-function/solution/jie-cheng-han-shu-hou-kge-ling-by-leetcode/

    • 乘法表中第k小的数

      https://leetcode-cn.com/problems/kth-smallest-number-in-multiplication-table/

      给定高度m 、宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字。

  • BFS

    • 迷宫中的最短路径

      https://blog.csdn.net/qq_28468707/article/details/102786710

    • 字符串A和B的最小相似度

      https://leetcode-cn.com/problems/k-similar-strings/solution/xiang-si-du-wei-k-de-zi-fu-chuan-by-leetcode/

    • 抖音红人

      DFS:https://blog.csdn.net/anlian523/article/details/82557468

      BFS:https://blog.csdn.net/u014253011/article/details/82556976

      对于每个用户,遍历粉丝数(记录visited)

  • DFS

    • 八皇后

      https://blog.csdn.net/handsomekang/article/details/41308993

      一行一行依次遍历(从上往下),决定放在哪列(从左往右),这样就不用判断行冲突,只需要判断列冲突和主斜线副斜线冲突.

      对角线=>斜率为1 => abs(A[i]-A[j])==abs(i-j)

    • 全排列

      https://leetcode-cn.com/problems/permutations/solution/

      有重复数字的全排列 sort:https://leetcode-cn.com/problems/permutations-ii/

    • 复原IP地址

      https://blog.csdn.net/OneDeveloper/article/details/84946233

      dfs,如果加完3个“.”了则判断是否符合条件,否则继续加(start,start+3)

    • 连通岛屿个数

      字节-部门合并:https://blog.csdn.net/zd_nupt/article/details/82669299

      dfs:每次遍历到1,则把联通的岛置为0

  • 双指针

    • 两数之和

      https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/solution/liang-shu-zhi-he-ii-shu-ru-you-xu-shu-zu-by-leetco/

      在已排序的数组中找到两个数,和为target

      双指针暴力求解 n^2 字典求解 时间n,空间n

      我们使用两个指针,初始分别位于第一个元素和最后一个元素位置,比较这两个元素之和与目标值的大小。如果和等于目标值,我们发现了这个唯一解。如果比目标值小,我们将较小元素指针增加一。如果比目标值大,我们将较大指针减小一。移动指针后重复上述比较知道找到答案。时间 n,空间1

    • 数组中两数相减的最大值

      https://blog.csdn.net/fkyyly/article/details/83930343

      非排序数组中两个数相减(前面减后面)的最大值。i<j, max(a[i]-a[j])

      if a[i]-a[j]>0: j++ else: i = j, j++

  • 滑动窗口

    • 最小覆盖子串

      https://leetcode-cn.com/problems/minimum-window-substring/solution/zui-xiao-fu-gai-zi-chuan-by-leetcode-2/

    • 和为K的子数组

      https://blog.csdn.net/a546167160/article/details/94401251

      当区间和等于target,再向后遍历,可以i+或j+,但是j+可能会越界,因此选择i+

    • 乘积小于K的子数组

      https://leetcode-cn.com/problems/subarray-product-less-than-k/solution/cheng-ji-xiao-yu-kde-zi-shu-zu-by-leetcode/

排序

  • 插入

    • 插入排序:稳定

      把后面的某个一次次插到前面,再管后面的,第一次确定的位置可能不是最终位置

    • 希尔排序

  • 选择

    • 选择排序

      每次选择最小的放到前面

    • 堆排

  • 交换

    • 快速选择

    • 冒泡排序:稳定

      把某个确定好,再管其他的,第一次确定的位置是最终位置

    • 快速排序

      https://blog.csdn.net/qq_36528114/article/details/78667034

      快排优化:

        1. 在个数小于N时使用插入排序

        2. 尾递归优化,减少递归栈的深度

        3. 加入三取样切分 //省去了对重复元素的比较,性能接近线性

  • 归并排序:稳定

    原地归并:直接把合适的片段swap过去

    https://blog.csdn.net/xiaolewennofollow/article/details/50896881

    两个片段的交换需要三次逆转:分别逆转[1, i]和[i+1,n] 再逆转[1, n]

    大数据归并应用较多

    • 数组中的逆序对

      https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/

    • 区间和的个数在某个区间

      https://leetcode-cn.com/problems/count-of-range-sum/

  • 基数排序:稳定

  • 链表排序

    https://www.cnblogs.com/TenosDoIt/p/3666585.html

    https://leetcode-cn.com/problems/sort-list/solution/sort-list-gui-bing-pai-xu-lian-biao-by-jyd/

  • 拓扑排序

         https://www.cnblogs.com/fengziwei/p/7875355.html

  • 字典序

    • 下一个排列

     https://leetcode-cn.com/articles/next-permutation/

    • 字典序的第K小数字

      https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order/

    • 字典序排数-先序遍历

      https://leetcode-cn.com/problems/lexicographical-numbers/

    • 按字典序排在最后的子串

      https://leetcode-cn.com/problems/last-substring-in-lexicographical-order/

  • TopK问题

    • 移除K位数字得到最小结果-栈

      给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。https://leetcode-cn.com/problems/remove-k-digits/

    • 数组中前K个高频元素

      https://leetcode-cn.com/problems/top-k-frequent-elements/solution/leetcode-di-347-hao-wen-ti-qian-k-ge-gao-pin-yuan-/

      哈希统计频率+topK排序

      堆排/快速选择/桶排

    • 查找和最小的K对数字

      https://leetcode-cn.com/problems/find-k-pairs-with-smallest-sums/

动态规划

  • 编辑距离

    https://zhuanlan.zhihu.com/p/80682302

  • 最长回文子序列/子串

    最长回文子序列:bbbab -> bbbb

https://leetcode-cn.com/problems/longest-palindromic-subsequence/solution/dong-tai-gui-hua-si-yao-su-by-a380922457-3/

  • 最长回文子串:bbbab -> bbbhttps://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode/

  • LCS

    公共子串:要求元素相邻:矩阵最长对角线

  • LIS

  • 1. 排序后求LCS,时间O(n^2),空间O(n)

    2. dp[i]存储A[:i]的LIS,每个i和前面的下标对比,时间O(n^2),空间O(n) for j in [i-1, 0]: if A[j]<A[i]: dp[i] = max(dp[i], dp[j]+1)

    3. dp[i]存储LIS为i+1时最大的值,最后len(dp)即为答案,时间O(nlogn),空间O(n) 二分法查找插入dp的位置

  • 最大子序和

    最大和包含当前和不包含:sum[i] = max(sum[i-1]+a[i], a[i])

  • 背包问题

    https://blog.csdn.net/stack_queue/article/details/53544109

  • 最短路径

    Dijkstra:单源&边权非负

    https://www.jianshu.com/p/ff6db00ad866

    Floyd:全源&负环,任意两点间的最短路径,时间复杂度为O(N3),空间复杂度为O(N2)

    Bellmanford:单源

    https://blog.csdn.net/lpjishu/article/details/52413812

    Johnson:全源&非负环

  • 股票问题

    https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/yi-ge-fang-fa-tuan-mie-6-dao-gu-piao-wen-ti-by-l-3/

模式匹配

  • 单模式单匹配:KMP

    字符串匹配,返回第一个匹配的位置

    https://www.zhihu.com/question/21923021/answer/281346746

  • 多模式单匹配:Trie

  • 多模式多匹配:AC自动机

大数据

  • 蓄水池抽样法

    选k个,新旧元素被选中第概率都是k/n 第k+1个以k/(k+1)被选中,之前在水池里的被替换概率为k/(k+1)*1/k=1/(k+1) 则旧元素留下的概率为k/(k+1),与新元素相等

公众号后台回复【思维导图】获取完整手册(Xmind脑图源文件,学习起来更方便(ง •_•)ง

夕小瑶的卖萌屋

_

关注&星标小夕,带你解锁AI秘籍

订阅号主页下方「撩一下」有惊喜哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过预训练提升语言理解

官方地址&#xff1a;https://blog.openai.com/language-unsupervised/文章&#xff1a;https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf代码&#xff1a;https://github.com/openai/finetune-tran…

最全Java架构师130面试题:微服务、高并发、大数据、缓存等中间件

一、数据结构与算法基础 说一下几种常见的排序算法和分别的复杂度。 用Java写一个冒泡排序算法 描述一下链式存储结构。 如何遍历一棵二叉树&#xff1f; 倒排一个LinkedList。 用Java写一个递归遍历目录下面的所有文件。 二、Java基础 接口与抽象类的区别&#xf…

智能投顾全面解读

智能投顾全面解读 <p>传统投顾一直是与理财产品的销售紧密结合在一起的。投顾即销售&#xff0c;在国内理财界也是约定俗成的现实。<br></p><p>传统投资顾问即证券投资顾问业务遵循《证券投资顾问业务暂行规定》&#xff0c;开展证券投资顾问业务的机构…

数据结构--二叉查找树 Binary Search Tree

文章目录1.二叉查找树概念2.二叉查找树操作2.1 查找2.2 插入2.3 删除2.4 其他3. 支持重复数据的二叉查找树4 有散列表了&#xff0c;还需要二叉查找树&#xff1f;5 代码实现1.二叉查找树概念 二叉查找树要求&#xff0c;在树中的任意一个节点&#xff0c;其左子树中的每个节点…

最新蚂蚁金服Java面试题:Docker+秒杀设计+RocketMQ+亿级数据设计

蚂蚁金服一面&#xff1a; 1 自我介绍 2 讲一下ArrayList和linkedlist的区别&#xff0c;ArrayList的扩容方式&#xff0c;扩容时机。 3 hashmap的实现&#xff0c;以及hashmap扩容底层实现。 4 NIO了解么&#xff0c;讲一下和BIO的区别&#xff0c;AIO呢。阻塞&#xff0c;…

论文浅尝 | 常识用于回答生成式多跳问题

链接&#xff1a;https://arxiv.org/pdf/1809.06309.pdfAnsweringTasks多跳问题一般需要模型可以推理、聚合、同步上下文中不同的信息。就需要理解那些人类通过背景知识可以理解的限制关系。本文提出了一个很强的baseline模型&#xff08;multi-attention pointer-generator d…

中国智能投顾行业

原文地址&#xff1a; 中国智能投顾行业 一、概要 财富管理与新兴金融科技的结合&#xff0c;使得财富管理行业正在进入新的阶段——智能财富管理。近几年全球出现的智能投顾模式已然成为智能财富管理的一大热点。智能投顾&#xff0c;简而言之&#xff0c;就是基于投资者的投…

别让数据坑了你!用置信学习找出错误标注(附开源实现)

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | JayLou娄杰&#xff08;NLP算法工程师&#xff0c;信息抽取方向&#xff09;编 | 北大小才女小轶美 | Sonata1 前言在实际工作中&#xff0c;你是否遇到过这样一个问题或痛点&#xff1a;无论是通过哪种…

助力句子变换:35W抽象、43W同义、13W简称三大知识库对外开源

句子变换&#xff0c;是指根据给定中文句子&#xff0c;借助某种语言处理手段&#xff0c;扩展出一定数据规模的中文句子集合&#xff0c;是一个从1到N的过程&#xff0c;目的在于解决搜索&#xff08;查询扩展&#xff09;、分类&#xff08;样本扩充&#xff09;、抽取&#…

数据结构--红黑树 Red Black Tree

文章目录1.概念2.操作2.1 左旋、右旋&#xff08;围绕某个节点的左/右旋&#xff09;2.2 插入2.3 删除3. 代码1.概念 二叉树在频繁动态增删后&#xff0c;可能退化成链表&#xff0c;时间复杂度由 O(lgn) 变成 O(n)。&#xff08;不平衡&#xff09;平衡二叉树&#xff0c;树中…

深度学习在用户画像标签模型中的应用

原文地址&#xff1a;https://blog.csdn.net/chaishen10000/article/details/79324016 最近一段时间都在学习深度学习&#xff0c;想着在用户画像标签模型中看能不能用上&#xff0c;终于&#xff0c;用了一个多月的时间&#xff0c;结合实际的场景和数据&#xff0c;搭建了一套…

最强京东Java面试题(共现场4面)

一面&#xff08;基础面&#xff1a;约1个小时&#xff09; 自我介绍&#xff0c;主要讲讲做了什么和擅长什么 springmvc和spring-boot区别 Autowired的实现原理 Bean的默认作用范围是什么&#xff1f;其他的作用范围&#xff1f; 索引是什么概念有什么作用&#xff1f;MyS…

工业界求解NER问题的12条黄金法则

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | JayLou娄杰&#xff0c;夕小瑶编 | 可盐可甜兔子酱美 | Sonata众所周知&#xff0c;命名实体识别&#xff08;Named Entity Recognition&#xff0c;NER&#xff09;是一项基础而又重要的NLP词法分析任…

POJ 1577 Falling Leaves(二叉查找树)

题目链接&#xff1a;http://poj.org/problem?id1577 题目大意&#xff1a; 二叉查找树按照叶子节点&#xff0c;从下往上抹去该树&#xff0c;给出抹除字符序列&#xff0c;求该二叉树&#xff0c;并前序打印 解题思路&#xff1a; 最后抹除的是根节点&#xff0c;把抹除的…

最新阿里内推高级Java面试题

阿里Java一面题目 osi七层网络模型&#xff0c;五层网络模型&#xff0c;每次层分别有哪些协议 死锁产生的条件&#xff0c; 以及如何避免死锁&#xff0c;银行家算法&#xff0c;产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制&#xff0c;双亲委派模型&…

智能投顾-用户画像、投资组合选择、推荐引擎、大数据挖掘

智能投顾面面观之AI慕课 原文地址&#xff1a;https://www.jianshu.com/p/437c895794e0?utm_campaignharuki&utm_contentnote&utm_mediumreader_share&utm_sourceweixin “最后编辑于 2017.11.14 21:49”>2017.11.13 11:47* 自我介绍 大家好&#xff0c;我是…

论文浅尝 | KG Embedding with Iterative Guidance from Soft Rules

论文链接&#xff1a;https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/download/16369/16011发表会议&#xff1a;AAAI 2018摘要知识图谱表示学习旨在将实体和关系嵌入到向量空间&#xff0c;同时保留知识图谱的内在结构。传统方法主要基于关系三元组学习知识图谱的嵌入…

人工智能轨道交通行业周刊-第69期(2023.12.11-12.24)

本期关键词&#xff1a;集装箱智能管理、智慧工地、智能应急机器人、车辆构造、大模型推理 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨…

可信知识实证在UGC时代情报应用中的思考与探索

可信知识实证在UGC时代情报应用中的思考与探索 在当前互联网高度发达、可发布信息源和信息渠道猛增且多元化的大背景下&#xff0c;信息形态变得广泛且多模。从传统的纸质文档&#xff0c;到中期的电子结构化文档、电子非结构化文本&#xff0c;再到如今的语音信息、图片信息、…

Google | 创造Youtube单次上线最高收益!解决推荐中的信息茧房困境

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 夕小瑶今天分享一下Google在WSDM 2019的一篇将强化学习应用于Youtube推荐的论文&#xff0c;作者宣称是获得了Youtube近两年来单次上线的最高收益。文章仔细介绍了RL在Youtube上的实践方案细节…