摘要:
这道题一个直观做法是对二叉树进行前序遍历,遍历时跟踪路径,当遍历到一个指定节点时,就把路径记下来。然后对比找到的两条路径,找出最后一个相同的节点。 另一个想法是,找到最小子树能够包含这两个节点。因此编程时可以考虑,如果找到了一个节点,就返回该节点,因为另一个节点如果在别的子树上,继续寻找就没有意义; 阅读全文
摘要:
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 阅读全文
摘要:
分析以下一段代码(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 * 阅读全文
摘要:
引用的底层实现是通过指针来完成的,但编译器做了一些语言层面上的限制,从而产生了引用这个特性。 引用就是存在之物的另一个名字,它本身不是对象。不存在空引用(定义时就需要初始化),所以某些场合使用引用比指正更高效,因为引用肯定非空,而指针需要判断是不是空指针。 在函数传值时使用引用可以防止产生临时对象。 阅读全文