机试题目分类

简单模拟:

(2018-1)求众数(水题):map存储,存储出现次数

(2017-1)中位数(水题):数字个数的奇偶分开讨论,注意偶数时求中间两数的平均值,若除不尽,要四舍五入

(2017-2)9位ISBN,求其校验位(水题):输入到字符数组,转化到int数组,按照题目要求计算

(2015-1)长方形中的正方形(水题)

(2015-2)a与b得到c(水题)

(2013-2)A Famous ICPC Team(四个小正方形放入大正方形)(水题):最小边长即为四条边中最大两个边之和

(2012-3)字符串的重复输出(水题)

 

字符串处理:

(2018-2)解一元一次方程(难):遇到 + - = 这三个符号单独处理,定义flag表示前面是+还是-,以及在等号的左或者右;遇到                                                              数字连续处理,转化为数值;之后再看后面一位是否为x, 从而来统计系数和、常数和

图:

(2017-3)选边使图连通(难):

动态规划:

(2016-1)求最大公共字串长度(难):

建立二维数组 dp[N][N] ,令dp[i][j] 表示str1[0...i]和str2[0...j]中连续相等最大字串的长度,不断更新ans

当str1[i]!=str2[j],令dp[i][j]==0;
当str1[i]==str2[j],dp[i][j]=dp[i-1][j-1]+1;
对于数字的第一行和第一列,由于最长的公共字符串长度为1,所以只要出现字符相等,就令n=1

(2018-3)骨牌问题:找规律可以发现满足斐波那契数列,定义一维dp数组,存放已经计算过的结果

(2014-2)计算两个字符串的编辑距离(难):

用 dp[i][j] 表示到str1的第i个字符与str2的第j个字符的编辑距离,可以得到如下的动态规划方程:

   其中, 

首先我们令word1和word2分别为:michaelab和michaelxy

dis[0][0]表示word1和word2都为空的时候,此时他们的Edit Distance为0。 
dis[0][j]就是word1为空,word2长度为j的情况,此时他们的Edit Distance为j,也就是从空,添加j个字符转换成word2的最小Edit Distance为j
同理dis[i][0]就是,word1长度为i,word2为空时,word1需要删除i个字符才能转换成空,所以转换成word2的最小Edit Distance为i
对于上面例子最后一位:如果b==y, 那么:dis[i][j] = dis[i-1][j-1]。                                                              
    如果b!=y,那么:添加:也就是在michaelab后面添加一个y,那么word1就变成了michaelaby,此时  dis[i][j] = 1 + dis[i][j-1];删除:也就是将michaelab后面的b删除,那么word1就变成了michaela,此时dis[i][j] = 1 + dis[i-1][j];替换:也就是将michaelab后面的b替换成y,那么word1就变成了michaelay,此时dis[i][j] = 1 + dis[i-1][j-1];

2011-1)求三个字符串的最大公共子串

STL:

Stack:

(2016-2)后缀序列求值:遇到数字,转为 int 型存入栈,遇到操作符,弹出栈顶的两个元素,运算即可。最后的结果为栈顶元素

priority_queue 优先队列

(2016-3)字符串的哈夫曼编码长度

哈夫曼树的编码长度等于各个叶节点权值与路径长度乘积之和,同时这个值等于非叶节点权值之和。

采用优先队列模拟哈夫曼树的建立:采用map记录字符与出现的次数,将每个字符的次数依次加入优先队列(数值小的在队头),每一次从队列中出队最小的两个,相加后再加入队列中。用ans记录每一次相加和temp值之和,当队列中剩下一个元素时,ans的值即为所求

(2015-3)优先队列的实现

String:

(2013-1)字符串匹配输出所有匹配pos:从头在m中匹配p,找到匹配的第一个字符串pos,继续从pos+1开始下一次匹配

二分查找:

(2014-1)二分查找的二分次数(简单-记):题中要求二分的次数,即就是把数组一分为二的次数,在每一次更新左右边界时更新次数

堆排序:

(2012-1)1000名求前30%(简单-记):注意输出前300

二叉树:

(2014-3)二叉树遍历(简单-记):静态数组存储,找root节点,遍历

(2012-2)求二叉树最大叶子间距(难):

本次设置全局变量maxd,在每个节点中寻找最大的间距,递归函数返回以该节点为根的子树高度

(2011-2)二叉树中序与后序求层次遍历(简单-记)

Hanoi 塔问题:

(2014-4)Hanoi 塔问题(难):

一个美国学者总结得到:所有的汉诺塔移动可以总结为重复的两步,我们假设现在最小的圆盘在a柱子上,柱子为a,b,c

第一步:将最小圆盘移动到下一个柱子上,也就是b

第二步:对a柱子和c柱子进行顶上最小的元素进行判断,把小一点的那个圆盘移动到大一点的那个圆盘(有空则摞在空柱子上)。

重复上述两步就可以得到答案。

注意:这样得到的最后的答案不一定是摞在c上,如果N是偶数将摞在b上,所以如果N是偶数我们就令第二个柱子为c,第三个柱子为b,这样就一定最后是摞在c上的。
 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值