面经算法
① 测试开发面试必知算法
测试开发的技能之一就是需要掌握一些开发的语言,而针对于考察开发语言,业界内比较容易采用的方式就是考察各种算法。在此做一个简单的总结(最近比较喜欢玩python,所以都是以Python为例子,其它的语言类推。)
冒泡排序
冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
实例:对列表 [2, 8, 4, 7, 5, 9, 0]进行冒泡排序
递归
递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。
实例:要计算1-10的10位数字的乘积,直观的算法是1 2 3 4 5 6 7 8 9,利用递归则思路是循环执行n*n-1,直到n=1时
二叉树遍历算法
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:
⑴访问结点本身(N),
⑵遍历该结点的左子树(L),
⑶遍历该结点的右子树(R)。
以上三种操作有六种执行次序含数唤:
NLR、LNR、LRN、NRL、RNL、RLN。
二叉树的节点表示可以使用
前序遍历:根节点->左子树->右子树
中谈凯序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
实例:求二毕或叉树深度和宽度
求深度用递归;求宽度用队列,然后把每层的宽度求出来,找出最大的就是二叉树的宽度
字符串倒序输出
思路一:索引的方法
思路二:借组列表进行翻转
后续还有的话会继续添加的。
② 面试经典数据结构和算法汇总
如果说数据结构是骨架,那么算法就是灵魂。没了骨架,灵魂没有实体寄托;没了灵魂,骨架也是个空壳。两者相辅相成,缺一不可,在开发中起到了砥柱中流的作用。
现在我对各种数据结构和算法做一总结,对比一下它们的效率
1.数据结构篇
1. 如果让你手写个栈和队列,你还会写吗?
2. 开发了那么多项目,你能自己手写个健壮的链表出来吗?
3. 下次面试若再被问到二叉树,希望你能对答如流!
4. 面试还在被红-黑树虐?看完这篇轻松搞定面试官 !
2.排序算法篇
1. 几个经典的基础排序算法,你还记得吗?
2. 手把手教你学会希尔排序,很简单!
3. 快速排序算法到底有多快?
4. 五分钟教你学会归并排序
5. 简单说下二叉树排序
6. 学会堆排序只需要几分钟
7. 图,这个玩意儿竟然还可以用来排序!
掌握了这些经典的数据结构和算法,面试啥的基本上没什么问题了,特别是对于那些应届生来说。接下来再总结一下不同数据结构和算法的效率问题,做一下对比,这也是面试官经常问的问题。
数据结构常用操作效率对比:
常用排序算法效率的对比:
关于经典的数据结构和算法,就总结到这,本文建议收藏,利用等公交、各种排队之时提升自己。这世上天才很少,懒蛋却很多,你若对得起时间,时间便对得起你。
③ 大公司笔试面试有哪些经典算法题目
1、二维数组中的查找
具体例题:如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列?
④ 经典C语言面试算法题
经典C语言面试算法题
1.写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回
9,outputstr所指的值为123456789。
#include
#include
#include
int FindMax_NumStr(char *outputstr,char *inputstr)
{
char *in = inputstr,*out = outputstr,*temp;
char *final;
int count = 0;
int maxlen = 0;
int i;
while(*in!='