14种模式解决面试算法编程题(PART II)
继续
8、树的宽度优先搜索(Tree BFS)
该模式基于广度优先搜索(BFS)技术来遍历树,并使用队列在跳到下一层之前记录下该层的所有节点。使用这种方法可以有效地解决涉及以逐级顺序遍历树的任何问题。Tree BFS模式的基本思想是将根节点push到队列然后不断迭代直到队列为空。对于每次迭代,删除队列头部的节点并“访问”该节点。从队列中删除每个节点后,我们还将其所有子节点push进队列。
应用场景
- 涉及到层序遍历树
举个栗子
- N叉树的层序遍历(LEETCODE)
- 二叉树的层序遍历(LEETCODE)
- 二叉树的锯齿形层次遍历
9、树的深度优先搜索(Tree DFS)
树DFS基于深度优先搜索(DFS)技术来遍历树。Tree DFS的基本思想是使用递归(或迭代方法的堆栈)在遍历时跟踪所有先前(父)节点。从树的根开始,如果节点不是叶子,则需要做三件事:
- 决定是立即处理当前节点(先序遍历),还是在之间处理两个子节点(中序遍历)或处理两个子节点之后(后序遍历)。
- 为当前节点的两个子节点进行两次递归调用来处理它们。
应用场景
- 涉及树的先序、中序或者后续遍历问题
- 如果问题涉及搜索节点离叶子更近的目标
举个栗子
- 求根到叶子节点数字之和(LEETCODE)
- 二叉树的最大深度(LEETCODE)
- 从中序与后序遍历序列构造二叉树(LEETCODE)
- 路径总和系列(LEETCODE)
10、Subset
大量的编程面试问题涉及处理一组给定元素的排列和组合。 Subsets模式描述了一种有效的广度优先搜索(BFS)方法来处理所有这些问题。
例如给定一个数组 [1, 5, 3]
- 首先初始化一个空数组:
[[ ]]
- 将第一个数字(1)添加到所有现有子集,以创建新的子集:
[[], [1]]
- 继续添加
[[], [1], [5], [1, 5]]
[[], [1], [5], [1, 5], [3], [1, 3], [5, 3], [1, 5, 3]]
应用场景
- 需要找到给定集合的组合或排列的问题
举个栗子
- 子集系列(LEETCODE)
- 字母大小写全排列(LEETCODE)
- 列举单词的全部缩写(LEETCODE)
- 单词子集(LEETCODE)
11、Modified binary search
无论何时给定排序数组,链表或矩阵,并要求查找某个元素,你可以使用的最佳算法是二分搜索。此模式描述了处理涉及二分搜索的所有问题的有效方法。
二分搜索这么经典的思路我就不多介绍啦,直接看一个可视化复习一下
举个栗子
- 搜索旋转排序数组(LEETCODE)
- 寻找两个有序数组的中位数(LEETCODE)
- 寻找旋转排序数组中的最小值(LEETCODE)
12、Top K
任何要求我们在给定集合中找到最大/最小/频繁“K”元素的问题都属于这种模式。
跟踪’K’元素的最佳数据结构是Heap。这种模式将利用Heap来解决从一组给定元素一次处理’K’元素的多个问题。大致思路是这样的:
- 根据问题将’K’元素插入到最小堆或最大堆中;
- 迭代剩余的数字,如果找到一个比堆中的数字大的数字,则删除该数字并插入较大的数字
应用场景
- 要求找到给定集合的最大/最小/频繁“K”元素;
- 要求对数组进行排序以找到确切的元素
举个栗子
- 前K个高频元素(LEETCODE)
- 前K个高频单词(LEETCODE)
- 第k个排列(LEETCODE)
13、K-way Merge
K-way Merge可以用于解决涉及一组排序数组的问题。
给出’K’排序数组,可以使用Heap有效地执行所有数组的所有元素的排序遍历。我们可以在Min Heap中push每个数组的最小元素以获得最小值。获得总体最小值后,将下一个元素从同一个数组推送到堆中。然后,重复此过程以对所有元素进行排序遍历。
应用场景
- 适用于排序的数组,列表或矩阵
- 问题要求合并排序列表,在排序列表中查找最小元素等
举个栗子
- 合并两个有序链表(LEETCODE)
- 合并K个排序链表(LEETCODE)
- 丑数系列(LEETCODE)
14、Topological sort
拓扑排序用于查找彼此依赖的元素的线性排序。例如,如果事件“B”依赖于事件“A”,则“A”在拓扑排序中位于“B”之前。流程大概是这样的:
- 初始化。
- a) 使用散列映射将图存储在邻接表中
- b) 要查找所有sources,使用HashMap维护入度的计数
- 建立图并找出所有顶点的入度
- a) 从输入构建图形并填充内部HashMap
- 查找所有的sources
- 所有入度为“0”的节点被认为是source,并存入队列中
- 排序
- 对于每一个source,do:
- 将其添加到已排序列表中
- 从图中获取它的所有子结点
- 将每个子节点的入度减一
- 如果某个子节点的入度为“0”,则将其加入队列中
- 重复上述步骤直到队列为空
- 对于每一个source,do:
应用场景
- 需要处理没有定向循环的图
- 要求按排序顺序更新所有对象
- 如果有一组遵循特定顺序的对象
举个栗子
- 课程表系列(LEETCODE)
- 矩阵中的最长递增路径(LEETCODE)
- 序列重建(LEETCODE)
以上~
2019.06.10
14种模式解决面试算法编程题(PART II)相关推荐
- 14种模式解决面试算法编程题(PART I)
万万没想到,暑假还没开始,有些公司的秋招提前批已经来了-很慌-数据结构和算法题可以说是秋招笔试面试必考的内容,如果你还不够熟练(just like me),那就要从现在开始疯狂刷题了啊朋友们. 附上我 ...
- 字母大小写全排列C语言,14种模式解决面试算法编程题(PART II)
写在前面 8.树的宽度优先搜索(Tree BFS) 该模式基于广度优先搜索(BFS)技术来遍历树,并使用队列在跳到下一层之前记录下该层的所有节点.使用这种方法可以有效地解决涉及以逐级顺序遍历树的任何问 ...
- 【面试锦囊】14种模式搞定面试算法编程题(1-7)
面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...
- 【面试锦囊】14种模式搞定面试算法编程题(8-14)
面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...
- C算法编程题(二)正螺旋
前言 上一篇<C算法编程题(一)扑克牌发牌> 写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文<谈谈外企涨工资那些事>,里面楼主讲到外企公司包含的五类人,其实不 ...
- C算法编程题(七)购物
前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...
- system verilog编程题_拼多多2020校招部分算法编程题合集
拼多多2020校招部分算法编程题2道,多多的魔术盒子和多多的排列函数 其实根据他的匹配职位我们可以看到,这5道题的难度还是并不高,只是作为一个初步筛选,我这边选择了前两道跟大家分享 [编程题一] 多多 ...
- C算法编程题(四)上三角
前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个"上三角",有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微 ...
- 10月11号58同城面试的编程题
有三道编程题,前面好像是12道选择,和8道不定选,之后是三道笔试,后面的编程也不难,但是建议一定要提前熟悉赛码或者是牛客的编程接口,要不然主题程序会写但是不会写接口,那就太心塞了. 第一道编程题: 找 ...
最新文章
- this.name=name;和this.setName(name);的区别
- 加薪方式的真相!你是哪一种?
- 需求评审五个维度框架分析及其带来的启示-3-典型需求评审
- 001.Amoeba读写分离部署
- 解决Nginx添加openssl模块编译时报错问题
- PostgreSQL学习手册(数据表)
- 反转字符串中的元音字符_C程序消除字符串中的所有元音
- 深度综述|基因与疾病关系研究的百年进展
- Windows8之hyper-v探索
- node-webki NATIVE UI API概览
- 门槛,才是做生意持久盈利的基础
- SharePoint Designer 2010中的外部内容类型-SQL Server
- LINUX内核内存管理kmalloc,vmalloc
- 仿乐享微信源码分享---微信营销
- Java-设计模式学习笔记-总结
- Yii2用户信息存储与获取
- 下一代英伟达H100 GPU发布时,国产芯片能追上吗?
- SQL中附加的基本运算
- 用纯python脚本玩转UU加速器
- 百度地图开放平台轻量路径规划
热门文章
- SAP License:MM常用事物码
- 使用 Spark ML Pipeline 进行机器学习
- 智慧楼宇管理运营端app、运维管理、工单管理、报修管理、维保管理、巡检查询、巡检管理、能源管理、维保查询、智慧社区、巡检统计、工单统计、能源管理、智能楼宇、设备监控、智能社区、系统运营、楼宇运维小程序
- Android精讲--界面编程2(布局管理器)
- 在IIS中给某一个网站添加binding的坑
- The 15th UESTC Programming Contest Preliminary K - Kidd1ng Me? cdoj1565
- 自制jQuery 复选框全选与反选插件
- JZOJ 6290. 倾斜的线
- Developer's Guide to Microsoft Enterprise Library, C# Edition
- leetcode 290 Word Pattern