摘要: DFS,给每个结点增加一个两元素的数组。res[0] 表示不加上当前结点值的最大值,res[1] 表示加上当前结点值的最大值。那么对于 res[0] 来说,其值等于子结点数组元素的较大值,因为此时可以加上子结点,也可以不加上子结点,选其中较大值。但是对于 res[1] 来说,就不行了,因为加上当前结 阅读全文
posted @ 2016-03-12 11:48 Sprink 阅读(1482) 评论(0) 推荐(0) 编辑
摘要: 找出数组中出现次数大于n/2次的元素。1.先排序,处于中间n/2处的元素必然是要求的元素,道理很简单,就算把其他元素全放在前半部分或者后半部分也都会占不满的,中间的永远是majority element;2.暴力,把每个元素出现次数记录下来,一旦大于n/2,就结束。由于每次都要与之前遍历过的元素进行... 阅读全文
posted @ 2015-04-04 15:40 Sprink 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 1、对于一维数组来说,数组作为函数参数传递,实际上传递了一个指向数组的指针,在c编译器中,当数组名作为函数参数时,在函数体内数组名自动退化为指针。此时调用函数时,相当于传址,而不是传值,会改变数组元素的值。例如:void fun(int a[]); 若在fun函数中有a[i]++;等语句,那么对应的... 阅读全文
posted @ 2015-03-27 14:46 Sprink 阅读(12538) 评论(0) 推荐(0) 编辑
摘要: 在网上看到有人说,整数类的这类题目,需要注意两点:一是符号问题;二是溢出问题。题解如下: 1 int reverse(int x) { 2 int res = 0; 3 while(x) 4 { 5 if(x>0) 6 { 7 ... 阅读全文
posted @ 2015-03-26 16:34 Sprink 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 第一种乘除法: 1 uint32_t reverseBits(uint32_t n) { 2 int i=32; 3 int num = 0; 4 while(i--) 5 { 6 if(n%2) 7 num = num*2 +... 阅读全文
posted @ 2015-03-26 15:33 Sprink 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 常规方法,一位一位右移,算出1的个数。但是最大的数有32个1,需要右移32次,效率较低。常规方法: 1 int hammingWeight(uint32_t n) { 2 int k,num; 3 num = 0; 4 while(n!=0) 5 { 6 ... 阅读全文
posted @ 2015-03-26 14:14 Sprink 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是:map.erase有3个重载:void erase ( iterator position );size_type ... 阅读全文
posted @ 2014-11-26 18:48 Sprink 阅读(1738) 评论(0) 推荐(0) 编辑
摘要: 今天做高性能计算机系统的作业的时候,发现gcc中的优化选项有很多应用 。例如对于C源码:#include #include int main(){ int x[101],y[101]; int a,i; a = 5; for(i=0;i=0; i--) y[i]... 阅读全文
posted @ 2014-11-12 21:41 Sprink 阅读(2882) 评论(0) 推荐(0) 编辑
摘要: 最重要的一点,fgets()不会过滤掉换行符,因此从文件中得到字符串"123\n"时,\n没有被换成\0,字符串长度为4。而gets()则会将换行符换成空字符\0再存储,长度为3。 阅读全文
posted @ 2014-11-08 23:26 Sprink 阅读(322) 评论(0) 推荐(0) 编辑
摘要: Gale-Shapley算法是这两个人提出来的一种稳定匹配问题。主要是当存在自由男时,进行以下操作:①每一位自由男在所有尚未拒绝她的女士中选择一位被他排名最优先的女士;②每一位女士将正在追求她的自由男与其当前男友进行比较,选择其中排名优先的男士作为其男友,即若自由男优于当前男友,则抛弃前男友;否... 阅读全文
posted @ 2014-10-21 15:02 Sprink 阅读(382) 评论(0) 推荐(0) 编辑