简单模拟:
(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)选边使图连通(难):?
动态规划:
建立二维数组 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数组,存放已经计算过的结果
用 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];
STL:
Stack:
(2016-2)后缀序列求值:遇到数字,转为 int 型存入栈,遇到操作符,弹出栈顶的两个元素,运算即可。最后的结果为栈顶元素
priority_queue 优先队列:
哈夫曼树的编码长度等于各个叶节点权值与路径长度乘积之和,同时这个值等于非叶节点权值之和。
采用优先队列模拟哈夫曼树的建立:采用map记录字符与出现的次数,将每个字符的次数依次加入优先队列(数值小的在队头),每一次从队列中出队最小的两个,相加后再加入队列中。用ans记录每一次相加和temp值之和,当队列中剩下一个元素时,ans的值即为所求
String:
(2013-1)字符串匹配输出所有匹配pos:从头在m中匹配p,找到匹配的第一个字符串pos,继续从pos+1开始下一次匹配
二分查找:
(2014-1)二分查找的二分次数(简单-记):题中要求二分的次数,即就是把数组一分为二的次数,在每一次更新左右边界时更新次数
堆排序:
(2012-1)1000名求前30%(简单-记):注意输出前300
二叉树:
(2014-3)二叉树遍历(简单-记):静态数组存储,找root节点,遍历
本次设置全局变量maxd,在每个节点中寻找最大的间距,递归函数返回以该节点为根的子树高度
(2011-2)二叉树中序与后序求层次遍历(简单-记)
Hanoi 塔问题:
一个美国学者总结得到:所有的汉诺塔移动可以总结为重复的两步,我们假设现在最小的圆盘在a柱子上,柱子为a,b,c
第一步:将最小圆盘移动到下一个柱子上,也就是b
第二步:对a柱子和c柱子进行顶上最小的元素进行判断,把小一点的那个圆盘移动到大一点的那个圆盘(有空则摞在空柱子上)。
重复上述两步就可以得到答案。
注意:这样得到的最后的答案不一定是摞在c上,如果N是偶数将摞在b上,所以如果N是偶数我们就令第二个柱子为c,第三个柱子为b,这样就一定最后是摞在c上的。