摘要:
此题目的意思是:形如下面的两个字符串阶乘,判断哪个更大。12!!!! 和 3!!!!!。前者有4个阶乘号,后者有5个。利用的原理就是:越大的数的同阶阶乘越大。也就是阶乘的单调性。所以可以直接去掉相同个数的阶乘号后再作比较。没有写大整数类,所以请不要用剩余两个!!以上的数测试,会溢出。下面是主要函数的代码:#include <iostream>#include <string>#include <algorithm>using namespace std;long long factorial( string& str ){int excl = cou 阅读全文
摘要:
题目要求:找到一个字符串中的一个连续子串,这个子串内不能有任何两个字符是相同的,并且这个子串是符合要求的最长的。例如:abcdeab,这个字符串有很多不重复子串,比如:abcde, bcdea, cdeab都是不重复子串,而且都是最长的。这个是一个经典的笔试题,百度也曾经出过。下面是代码:(注:由于我的代码本来目的是只求出长度即可,所以只保留了最后一个最长串的结果;如果想求得所有最长的不重复子串,即把所有可能都列出来,则需要再遍历一遍数组或者把所有结果保存下来,需要对代码作修改)PS:我在代码中用了hash_map,估计要比较新版的VC才支持,我不知道GCC或者G++需要把命名空间改为什么,请 阅读全文
摘要:
这是动态规划的经典问题之一,也有空间换时间的特点:储存计算过程中的信息,防止回溯及多余的遍历。【公共连续子串】我们知道,如果寻找“最长公共连续子串”问题,那么可以用下面文章所说的“矩阵填充法”:http://acm.whu.edu.cn/blog/read.php?24实际上不连续的子序列问题,也还是采用了类似的方法。【最长公共子序列问题】具体的解释和递推公式,可以看下面的参考文献。我的代码里面主要是两个函数,第一个是计算长度,第二个是在矩阵中回溯,以找到这个子序列。回溯采取了与生成完全一致的方法。//LCS#include <iostream>#include <vecto 阅读全文
摘要:
(1)基本思想我感觉可以把基数排序归类在“减治”的算法类别中,因为基数排序实际上每执行一次排序就能减少问题的规模(它是一种稳定的排序)。我们在日常生活中最常使用的十进制数的大小比较其实就是基数排序最好的实例(具体见本文第2节),我们在比较两个2位数时,会先比较其十位的大小,然后比较个位大小。例如,53和56。这是基数排序的MSD(most significant digital)的情况。当然,基数排序其实并没有用“比较”,基数排序和桶排序(bucket sort)都采用了“桶”作为每一步排序的存储单位。这些“桶”其实是排序好的。对于十进制数来说,一共只有0-9共10个桶。如果将乱序的数字(比如 阅读全文
摘要:
汤森路透的笔试题是IKM的标准试题--Internet Knowledge Measurement,软件开发的主要包括三种内容:C++语法/UML设计/SQL语句。考得很细节。这个笔试题是考虑时间因素的,如果是题目答对的一样多,如果时间越短,最后的成绩会越高;不会的题可以skip,因为答错还倒扣分。我记得我skip了很多SQL的题目,但是最后还是过了,我是那场第一个答完题目的。过了一周之后,HR通... 阅读全文
摘要:
一道C++多态的题目,考察多态和构造顺序的。求输出结果:#include <iostream>#include <vector>class Base{public: Base(){ cout<<"Base::Base()"<<endl; virt(); }virtual void virt() { cout<<"Base::virt()"<<endl; }void func(){ cout<<"Base::func()"<<endl; }} 阅读全文
摘要:
正则表达式中我们可以使用一对括号(此处单指小括号(),中括号[]和大括号{}不包括在内)将一个正则表达式扩起来以表示它是一个整体。例如:([0-9A-Za-z]+)表示括号内的进行整体匹配。但是在C#中,这种整体匹配还有一个小小的副作用:C#的正则表达式引擎将这种括号内的正则表达式组在结果中进行了保存。下面以一个例子说明。现在我们要匹配一个时间的格式:03/15/2010。表示的是MM/DD/YY... 阅读全文
摘要:
本文是第二遍重读此书的读书笔记,因此只捡了一些自己在重读时仍感重要的知识进行了记录。当然会有些东西遗漏,对我不重要的不一定对每个人都不重要。PS:这些东西还是需要一定的C++语法基础的。再PS:页数都是按照侯捷先生的中文版所标。粗体部分乃是重中之重。================================================================================【第一章】在虚拟继承的情况下,base class不管在继承链中被派生多少次,永远只存在一个实体。P11C++中凡是处于同一个access section的数据,必定保证以其声明次序出现在内 阅读全文
摘要:
今天看到一个有意思的C++语法问题。就是如果一个派生类中含有与基类虚函数重名的静态成员函数,用指针调用会如何。代码如下:#include <iostream>using namespace std;class A{public:void virtual print(){ cout<<"A::print()"<<endl; }};class B :public A {public:void virtual print(){ cout<<"B::print()"<<endl; } } ; class 阅读全文
摘要:
a) 重载(overload)。重载这个名词本身比较简单,函数一共只有三个要素:函数名、形参、返回值。重载的要素是很明确的:函数重名,形参不同(个数或者类型不同都可以)。与返回值无关。但是一定请不要忘记重载另一个非常重要的要素:同一个作用域内才发生重载![重载与继承]关于这二者的关系有两条准则(仔细看,其实就是一条):如果派生类重定义了重载成员,则通过派生类型只能访问派生类中重定义的那些成员。如果派生类想通过自身类型使用所有的重载版本,则派生类必须要么重定义所有的重载版本,要么一个也不重定义。b) 覆盖(override)同一个作用域内满足一定条件会发生重载。那不同的作用域内呢?只满足一个条件 阅读全文