![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之美学习笔记
文章平均质量分 74
kindlucy
这个作者很懒,什么都没留下…
展开
-
一道关于字符串匹配的思考题
题外话:很多年前碰到的一道题了,那时候不会做,今天看《编程之美》的时候看到那篇算字符串相似度的题的时候,想到也应该来做一下那时没做出来的题了,而且计算字符串相似度的算法也正好可以用在那道题上。原题是什么我已经不记得了,反正就当我做的一道思考题吧: 题目:读取字符串s1和s2,其中s1是正常的单词,而s2中可能包含?和*s2中的?代表任意一个字符,*代表任意n个字符(原创 2010-05-10 23:27:00 · 864 阅读 · 0 评论 -
编程之美学习笔记-第二章(一)
<br />2.1 求二进制数中1的个数<br />解法一:除2的余数<br />解法二:移位<br />解法三:v&(v-1)<br />解法四:查表法(空间换时间)<br /> <br />2.2 不要被阶乘吓倒<br />求N!中含质因数K的个数Z=[N/K]+[N/K^2]+[N/K^3]+…<br />ret = 0<br />while(N)<br />{<br /> ret += N / K;<br /> n /= K<br />}<br />求N!中的末尾0的个数,即原创 2010-06-15 22:47:00 · 734 阅读 · 0 评论 -
一道简单的面试题
网上搜的面经,有一道题,是这样的:原有一个有序数组,分成前后两部分,然后将这两部分交换得到一个新的数组。写一个函数,参数是这个新的数组,要求找到数组分开的那个结点,而且要考虑时间复杂度。首先,由于数组原来是有序的,在这里假设为升序,那么即使两部分交换了后,两部分的数据仍然是升序的,设原来数组是前部分+后部分,交换后数组变成后部分+前部分,但是后部分的数的最小值仍然比前部分的最大值要大,因此,后部分的数据一定比前部分的数据大。可以通过一次遍历数组的方式,找到分开的节点,如果数据一直升序下去,就一直遍历,直到找原创 2010-06-17 19:17:00 · 1059 阅读 · 1 评论 -
PKU ACM 1050- to the max
<br />题目来源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1050<br /> <br />解题报告:<br />这道题是求二维子数组之和的最大值,详细的解释在编程之美2.15节有讲过,我的算法就是编程之美上提到的。<br /> <br />算法思路主要就是枚举行,设b[i][j]代表第j列中前i行的数据之和。那么,第m行到第n行间的第j列数据之和就是b[m][j]-b[n-1][j]。<br />这样按行枚举后,题目就转化为求一维子数组之和的最大值,这原创 2010-06-17 12:21:00 · 1400 阅读 · 0 评论 -
PKU ACM 2479-Maximum sum
一道动态规划的题http://acm.pku.edu.cn/JudgeOnline/problem?id=2479 Maximum sumTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 17327 Accepted: 5239DescriptionGiven a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below: 这里公式看不见,就是求数组A中原创 2010-06-14 19:42:00 · 1620 阅读 · 0 评论 -
一道网上找的微软笔试题
给你一串数字,例如"1234567890",按照以下规则加密:1. 将所有的3,6换成42. 将所有的数字加2,如果加2后得到的数字大于9,则替换为9 问题:1. 编写加密程序2. 编写解密程序 思考:加密程序很简单,我这里就不写了。写一下解密程序,解密程序要输出所有可能的字符串组合,数字对应如下:0 - 21 - 32 - 43 - 6原创 2010-05-28 19:55:00 · 614 阅读 · 0 评论 -
分层遍历二叉树
给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一行要求访问的顺序是从左到右。《编程之美》中有递归和非递归的解法。递归解法的思路是,假设要求访问二叉树中第K层的节点,那么可以把它转换成访问以该二叉树根节点的左右节点为根的两颗左右子树的第K-1层的节点。依次递归下面程序是输出第K层的节点 int PrintNodeAtLevel(nod原创 2010-05-13 15:24:00 · 3519 阅读 · 0 评论 -
反转单链表
1. 反转一个单链表例子:1 -> 2 -> 3 ->4-> 5 -> NULL 反转后变为 5->4->3->2->1->NULL#include using namespace std;class node{public: int data; node *next; node(int i,node* n=NULL):data(i),next(n){}原创 2010-05-13 20:49:00 · 1303 阅读 · 0 评论 -
求二叉树中节点的最大距离
《编程之美》给出了一种方法,但是它要为每个节点都保存一个最长左子树距离和最长右子树距离的字段。我想到了另一种方法,就是为节点编码,根节点设为0,对于一个节点的左节点,它的编码是它的父亲节点的码后面加个0,对于一个节点的右节点,它的编码是它的父亲节点的码后面加个1,如果我们找到了叶子节点,就把为它编的码存在一个数组中。一次遍历完毕后,数组中就存在所有叶子节点的编码了,再将根节点的码也存在数组中。原创 2010-05-11 23:46:00 · 667 阅读 · 0 评论 -
一道链表相关的笔试题
从网上搜到的笔经:题目大致如下:写代码。把一个单链表,按照指定位置逆序。并在code中体现基本错误异常处理之类。 不能再多malloc内存了,可以用temp pointers。还有一个不允许的什么条件没看懂,无 碍大雅吧。 eg。n1->n2->n3->n4->n5->null phead = n1;pstart = n3;返回这个n3->n2->n1->n5-> n4-原创 2012-04-07 00:33:37 · 578 阅读 · 0 评论