校招知识点总结篇之数据结构算法

1.常用数据结构简介

数据、数据元素、数据项、数据对象

物理结构:顺序、链式存储

逻辑结构:集合结构、线性结构、树形结构、图形结构

算法的特性:输入、输出、有穷性、确定性、可行性

2.排序算法有哪些?

校招知识点总结篇之数据结构算法_第1张图片

注:时间复杂度——算法所花费时间;空间复杂度——算法运行所占内存的大小;稳定性——相等的两个数a与b,排序前a在b前面,若排序后位置不变则稳定,反之则不稳定;内排序——排序在内存中完成;外排序——数据量大,排序要通过内存和磁盘;                                                                             我们常说的算法是内部排序算法(插入、选择、交换、归并),排序算法分为比较排序、非比较排序(基数、计数、桶排序)

1.1 最快的排序算法是哪个

数据规模较小:直接插入排序(序列基本有序);简单选择排序(不稳定),对稳定性有要求宜用插入或冒泡(稳定);

数据规模较大:快速排序(序列无序,不稳定);归并排序(序列无序,稳定,内存大);

数据规模巨大:归并排序(稳定)或堆排序(不稳定)

1.2常见排序算法的过程及详细代码(8大)

冒泡排序:对于给定的n个记录,两两比较相邻记录的关键字,若反序则交换,直到没有反序记录为止。

校招知识点总结篇之数据结构算法_第2张图片

 

简单选择排序:通过n-i次关键字比较间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。

校招知识点总结篇之数据结构算法_第3张图片

直接插入排序:将一个记录插入到已排好序的有序表中,得到一个新的、记录数增1的有序表。假设第一个记录自成一个有序序列,按记录大小依次插入,直至最后一个记录插入有序序列为止。

校招知识点总结篇之数据结构算法_第4张图片

快速排序:给定一组记录,通过一趟排序,将待排序记录分割为独立两部分,其中一部分记录的关键字均比另一部分记录的关键字小,分别对这两部分记录进行排序,直到整个序列有序。(通常取第一个元素作为枢轴分为两部分,左边比它小,右边比它大)

校招知识点总结篇之数据结构算法_第5张图片

希尔排序:缩小增量排序,将原纪录(有大量记录数)进行分组,分割为若干子序列,使每个子序列待排序列的记录个数相对较少(相距某个增量的记录组成一个子序列),对各个子序列分别进行直接插入排序,当整个序列基本有序时,再对全体记录进行一次直接插入排序。(在直接插入排序的基础上加增量序列)

校招知识点总结篇之数据结构算法_第6张图片

校招知识点总结篇之数据结构算法_第7张图片

归并排序:原理是假设初始序列含有n个序列,可以看成是n个有序的子序列,将每相两个邻的长度为1的子序列进行归并,得到n/2(向上取整)个长度为21的有序序列,再将其两两归并,如此重复,知道得到一个有序序列为止。

堆排序:完全二叉树,最大堆和最小堆。假设利用大顶堆,序列的最大值就是堆的根节点,将其与堆数组的末尾元素交换,末尾元素就是最大值,然后将剩余n-1个序列重新调整为一个堆,得到次大值。如此反复执行,得到一个有序序列。两个过程:建堆,调整堆;

3.查找算法

折半查找(二分查找时间复杂度:log2n,线性表有序):

校招知识点总结篇之数据结构算法_第8张图片

顺序查找、索引顺序(分块)、二叉树查找、哈希查找

4.两个栈模拟队列操作和两个队列实现栈

5.二叉树

基础知识(性质):

  1. 二叉树第i层上的结点数目最多为 2i-1 (i≥1)
  2. 深度为k的二叉树至多有2k-1个结点;
  3. 包含n个结点的二叉树的高度至少为log2 (n+1)(向上取整)或者(log2 n+1(括号内向下取整)
  4. 在任意一棵二叉树中,若终端结点(度为0)的个数为n0,度为2的结点数为n2,则n0=n2+1n0=1+ n2+2n3+……+n-1nm);
  5. 完全二叉树结点数N为奇数时,它有(N/2)+1个叶结点,当N为偶数时,它有N/2个结点;
  6. N个节点可构成的多少种类型的二叉树C(2n,n)/(n+1)
  7. n个结点的完全二叉树,i为某节点a的编号,a双亲结点的编号为i/2向下取整,2i<=n,左孩子编号为2i,反之,无左孩子;2i+1<=n,右孩子编号为2i+1,反之,无右孩子;

遍历:前序——根左右,中序——左根右,后——左右根;

二叉树存储:

二叉树遍历(前中后、深度、广度优先遍历):

对树、B+树的理解,树与图:

6.字符串处理(拷贝、连接、比较、串长、串匹配KMP

(1)字符串反转(逆序输出)

给出s = "the sky is blue",返回"blue is sky the"

校招知识点总结篇之数据结构算法_第9张图片

字符逆序:输入—I am a student 输出-tneduts a ma I

校招知识点总结篇之数据结构算法_第10张图片

(2)字符串匹配:字符串相等/子序列(移除法、查找法)

(3)字符串中第一个只出现一次的字符

(4)字符串所有组合

(5)字符串中每个字符出现的次数

6.常见编程题汇总

(1)并集(有序/无序):

(2)交集:

二路归并(array1[i]==array2[j], array1[i]>array2[j], array1[i]

校招知识点总结篇之数据结构算法_第11张图片

两个哈希表计数,为2则相交;遍历数组,查询哈希表,存在,相交;

(3)有序/无序数组中,统计给定数字出现的次数?最大?

二分查找改进

(4)重复次数最多的数?出现次数超过一半的数?唯一重复?

定义一个 int count[max];

(5)最大最小值

(6)进制转换(26进制转换)

(7)链表:双链表的逆序反转?环形链表的判断?合并多个单有序链表(单链表与双链表的区别、链表与数组的区别)

(8)回文数

思路1:将数字转化为字符串

校招知识点总结篇之数据结构算法_第12张图片

思路2:利用数字的整除和取余;

校招知识点总结篇之数据结构算法_第13张图片

(9)斐波那契数列

前n项斐波那契数列之和:

校招知识点总结篇之数据结构算法_第14张图片

(10)分数数列求和

校招知识点总结篇之数据结构算法_第15张图片

(11)ABC求非空子集

校招知识点总结篇之数据结构算法_第16张图片

(12)最长01字串的长度

思路1:使用正则表达式,若是01/10,count++;

思路2:判断前一位跟后一位,若不相同,count++;

(13)青蛙跳台阶问题

思路:递归式、迭代式,实现如下:

校招知识点总结篇之数据结构算法_第17张图片

(14)一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法

(15)二叉树给出根节点和目标节点,找出从根节点到目标节点的路径

9.其他

(1)数组元素地址计算:按行优先——Loc(A[0][0])+(i*n+j)*C(每行n个元素)

按列优先——Loc(A[0][0])+(j*m+i)*C(每行m个元素)

(2)堆的结构?堆和树的区别?堆和栈在内存中的区别是什么?

堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。                                    

数据结构方面:堆先进先出;栈先进后出;实际实现:堆和栈的空间分配 -堆内存放的是实体(数组、new的对象),栈内存放的是局部变量;栈内存更新速度快于堆内存(局部变量生命周期短);栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。  

(3)什么是深拷贝和浅拷贝?

(4)GC算法(各种算法的优缺点以及应用场景);

(5)子串包含问题(KMP 算法)写代码实现;

(6)蚁群算法与蒙特卡洛算法

(7)常见算法思想问题

  • 给阿里2万多名员工按年龄排序应该选择哪个算法?
  • 万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)
  • 百度POI中如何试下查找最近的商家功能(提示:坐标镜像+R树)。
  • 两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?
  • 一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中,说出最优的方法;
  • 一张Bitmap所占内存以及内存占用的计算;
  • 2000万个整数,找出第五十大的数字?
  • 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
  • 5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同?
  • x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完?

暂时就整理到这,没有实现的有时间实现了后期再填补,好累,收尾!!!

你可能感兴趣的:(校招篇)