数据结构论坛

注册

 

发新话题 回复该主题

Github标星42K超火的几份算法笔 [复制链接]

1#

前言

这几年IT技术蓬勃发展,日新月异,对技术人才的需求日益增长,程序员招聘市场也如火如荼。在有限的三五轮面试中,国外流行让面试者编程解决某些数据结构和算法的题目,通过观察面试者编码的熟练程度、思考的速度和深度来衡量面试者的能力和潜力。除字节跳动之外国内以百度、阿里、腾讯为首的互联网企业也都逐步开始采用算法面试来筛选人才。

下面就来看看去年腾讯、百度、阿里的算法面试题吧,你能答出多少题?

腾讯

给定一个只由0和1组成的二维数组matrix,每一行都可以保证所有的0在左侧,1在右侧,哪些行拥有最多数量的1,请放入一个列表返回给定一棵二叉树的头节点head,已知所有节点的值都不一一样,返回其中最大的且符合搜索二叉树条件的最大拓扑结构的大小。N=3,可以三次都跨1个台阶:也可以先跨2个台阶,再跨1个台阶:还可以先跨1个台阶,再跨2个台阶。所以有三种走法,返回3。平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1。给定一棵二叉树的头节点head,判断这棵二叉树是否为平衡二叉树。

百度

给定两个字符串strl和str2,返回两个字符串的最长公共子序列。给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都放在左边的柱子上,想按照汉诺塔游戏的要求把所有的圆盘都移到右边的柱子上。实现函数打印最优移动轨迹。给定-一个只由0(假)、1(真).(逻辑与)、

(逻辑或)和^(异或)五种字符组成的字符串express再给定一个布尔值desired.返回express能有多少种组合方式,可以达到desired的结果。给定一个字符串数组strs[],在strs中有些位置为null,但在不为null的位置上,其字符串是按照字典顺序由小到大依次出现的。再给定-一个字符串str,请返回str在strs中出现的最左的位置。

阿里巴巴

给定一棵二叉树的头节点head,完成二叉树的先序、中序和后序遍历。如果二叉树的节点数为N,要求时间复杂度为O(N),额外空间复杂度为0(1)。已知一棵二叉树的所有节点值都不同给定这棵二叉树正确的先序中序和后序数组。请分别用三个函数实现任意两种数组结合重构原来的二叉树,并返回重构二叉树的头节点。给定彼此独立的两棵树头节点分别为t1和t2,判断tl中是否有与t2树拓扑结构完全相同的子树。一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只能申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?

另外,除应付面试之外,还有很重要的一点,甚至是更重要的一点,就是本笔记可以帮我们打开思路,因为很多算法题的解法是需要逆向思维的,需要跳出原有的固定思维模式,当思维模式被打开之后,你会发现原有的事物现在看起来会有不同的看法,因为角度变了。不过这只能自己体会。

这一篇文章的内容信息量会很大,内容也比较多,为了方便大家阅读,小编截取部分重点内容以截图方式展示,文末有这份算法宝典免费获取方式,请大家耐心看到最后,绝对有收获。

第一份算法宝典

本书是一本数据结构方面的优秀教材,以Java为描述语言,介绍了计算机编程中使用的数据结构和算法。本书强调问题及其分析,而非理论阐述,共分为21章,讲述了基本概念、递归和回溯、链表、栈、队列、树。优先队列和堆、并查集DAT.图算法、排序、查找、选择算法(中位数),符号表、散列、字符串算法、算法设计技术、贪婪算法、分治算法、动态规划算法。复杂度类型等内容。每章首先阐述必要的理论基础,然后给出问题集。全书中大约有个算法问题及相应的解法,对于许多问题,本书提供了多个具有不同复杂度的解决方法。

笔记包含四大部分,第一部分(第1~2章)主要描述抽象数据类型,第二部分(第3~9章)介绍基本数据结构,第三部分(第10~15章)介绍数据处理的技术,第四部分(第16~21章)重点介绍一些常用的算法设计技术及应用

第一部分抽象数据类型

绪论递归和回溯主要描述抽象数据类型,给出算法的基本概念和复杂度分析与评价方法

递归与迭代

第二部分基本数据结构

链表栈队列树优先队列和堆并查集ADT图算法包括链表、栈、队列、树、优先队列、堆、并查集和图,对于每一种数据结构分别采用多个实例进行具体的演示。

二叉树

第三部分数据处理的技术

排序查找选择算法(中位数)符号表散列字符串算法.介绍数据处理的技术,包括排序、查找、选择、符号表、散列和字符串算法。

存储字符串的数据结构

第四部分算法设计技术及应用

算法设计技术贪婪算法分治算法动态规划算法复杂度类型杂谈重点介绍一些常用的算法设计技术及应用,包括贪婪算法、分治算法、动态规划算复杂度类型,并讨论对于面试和考试的一些有用话题,

贪婪算法的应用

第二份算法宝典

这是一本程序员面试宝典,书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。“刷”完本书后,你就是“题王”!

栈和队列问题

用栈来求解汉诺塔问题

链表问题

两个单链表生成相加链表

二叉树问题

找到二叉树中的最大搜索二叉子树

递归和动态规划问题

汉诺塔问题

字符串问题

数组中两个字符串的最小距离

大数据和空间限制问题

40亿个非负整数中找到出现两次的数和所有数的中位数

位运算问题

不用任何比较判断找出两个数中较大的数

数组和矩阵问题

计算数组的小和

其它问题

Manacher算法

数据结构与算法面试题

B-TREE

红黑树

桶排序算法、剪枝算法、基数排序算法

写在最后

作为一个求职者,如果你能完整地阅读本书并且很好地领会书中的内容,相信你会从容地面对面试官,笔记对攻读工程学位的学生和研究生都非常有用。在所有的章节中,你会发现笔记中更强调问题及其分析,而不是理论的阐述。每一章将首先阐述必要的理论基础。然后再给出问题集。这两份笔记大约有个算法问题及相应的解。

需要获取这两份算法宝典的朋友,麻烦帮忙点赞转发加

分享 转发
TOP
发新话题 回复该主题