04 2016 档案
摘要:1 #include<stdio.h> 2 #include<stack> 3 using namespace std; 4 void QSort(int*p, int left,int right) 5 { 6 if(left>=right) 7 return; 8 int i,j; 9 int
阅读全文
摘要:原理很简单,不能用乘除取模,一般总是用位运算,左移或者右移。左移一次相当于乘以2。直到乘到比被除数大为止,用被除数减去前一个数,并记录下乘以2的次数。然后对产生的差值迭代做上述操作。直到差值小于除数为止。此外,labs函数是abs的扩展,记下用法。 class Solution { public:
阅读全文
摘要:想着用动态规划的方法,有点类似于n*n的网格,从(0,0)开始走到(n-1,n-1)有几种方法。当然必须满足纵坐标大于等于横坐标,还有必须记录到达每一个点所走的方法(这里指的是有多少不同的字符串)。 class Solution { public: vector<string> generatePa
阅读全文
摘要:在类中,可以重载operator new和operator delete,就像重载operator=一样。定制operator new/delete可以获得一些好处,比如更快地搜索可分配内存,产生较少的内存碎片。 除非仅分配较小的空间,STL容器使用的一般是堆内存,而堆是多个线程可共享的,所以说ST
阅读全文
posted @ 2016-04-07 13:13
vaevaevae
摘要:分析以下一段代码(vs2010编译) 1 #include<iostream> 2 using namespace std; 3 class ba 4 { 5 public: 6 double dd; 7 }; 8 class bas 9 { 10 public: 11 double d; 12 }
阅读全文
摘要:蘑菇街校招题:给定一个字符串,问是否能通过添加一个字母将其变为回文串。 腾讯实习招聘题:对于一个字符串,删去其中某些字符,找到最长回文串。 这两题本质上都是找字符串的最长回文子序列,把当前字符串翻转,然后求翻转字符串和原来字符串的LCS。动归很容易解决。 1 #include<iostream> 2
阅读全文
摘要:这题和LC76 Minimum Window Substring可以归为一类,就是给出要找的字符(字符串)和相应个数,利用滑动窗口在另一个字符串上找。类似的题目还有LC3。 首先需要用map把出现的单词和相应出现的次数记录下来。 然后维护一个窗口,一步步往前移动。每移动一次就检查是否满足条件。解题时
阅读全文
摘要:const最常用的是定义一个常量,用来代替#define的部分功能,因为#define只是单纯的文本替换,而const的变量会由编译器进行类型检查,更加安全。而且#define 会造成代码膨胀,而const常量在内存中只有一份拷贝。 注意const int *p,int const *p,int *
阅读全文
posted @ 2016-04-05 12:43
vaevaevae
摘要:引用的底层实现是通过指针来完成的,但编译器做了一些语言层面上的限制,从而产生了引用这个特性。 引用就是存在之物的另一个名字,它本身不是对象。不存在空引用(定义时就需要初始化),所以某些场合使用引用比指正更高效,因为引用肯定非空,而指针需要判断是不是空指针。 在函数传值时使用引用可以防止产生临时对象。
阅读全文
posted @ 2016-04-05 09:52
vaevaevae
摘要:static最显著的两个作用:在类中修饰成员变量,修饰成员函数。这表示这些成员变量和成员函数是属于类的,不属于某个具体实例。初始化静态成员变量在进入main函数之前进行,且初始化只进行一次(如何建立单例,就是从这里入手)。静态成员函数不可能是虚函数,但可以调用实例方法(静态成员函数接收一个实例,然后
阅读全文
posted @ 2016-04-04 23:02
vaevaevae
摘要:1 #include<iostream> 2 using namespace std; 3 4 class ba{ 5 public: 6 ba(){cout<<"ba"<<endl;} 7 virtual char* vf() const=0; 8 }; 9 10 class bas:public
阅读全文
posted @ 2016-04-04 22:05
vaevaevae
摘要:private继承的意思是“根据某物实现出”,是一种“has-a”的关系。而不像public继承那样继承了接口,是一种“is-a”的关系。 private继承一般可以通过复合来代替,但也有些情况会比复合更好 1 #include<iostream> 2 using namespace std; 3
阅读全文
posted @ 2016-04-04 12:06
vaevaevae
摘要:还是利用深搜的思想,注意一个元素可以取无数次。而LC40 Combination Sum II 就有次数限制,有次数限制的情况下可以先判断一个数是否与它前面的数相等,若相等则跳过该元素,直到找到一个数与它前面的数不等,再进行深搜。 这里附上LC39的代码 1 class Solution { 2 p
阅读全文
摘要:可以用类似于DFS的方法去做。这道题目是LC78 Subsets的子问题。 对于LC78,另一个巧妙的做法是:我们可以先用一个整形数组(长度和nums相等),数组元素一开始都是1。把整个数组看成一个二进制数,然后模拟二进制减法,将这个数组一步一步减1减到0。每减一次1,对照这个二进制数组和nums数
阅读全文
摘要:这道题目有两种做法,第一种是把排列一直列到第k个。另一种做法是利用康托编码,如果把n!个排列根据首个数字大小排列成n组,则每一组有(n-1)!个元素,求第k个排列,可以先令p=k/(n-1)! 求出第一个数字num[p]. 然后递归做下去。更新数字k=k%(n-1)!,并在数组num中删除num[p
阅读全文
摘要:有关排列的题目,如果用DFS去做,就十分低效。这里介绍一种做法:求下一个序列,先从尾部开始找最长的递增数组,如果从尾到头都是递增,则这已经是最大序列,下一个序列就是将最大序列翻转一下。如果不存在递增数组,则将最后两位数交换一下。其他情况,则记录下递增数组的前一位数,并找出递增数组中比这个数大的最小的
阅读全文
摘要:典型的动态规划题,和《剑指offer》中的矩形覆盖题相似,只不过要考虑不同的边界情况。 另外对于《剑指offer》中的矩形覆盖题,值得考虑的是当矩形是n*n时,会有多少种覆盖的情况? 1 class Solution { 2 public: 3 int numDecodings(string s)
阅读全文
浙公网安备 33010602011771号