摘要:
最近看面试题,又看到了关于栈溢出的问题,突然心血来潮,想着以前老是停留在理论上,今天何不试一试,实实在在感受一下. 当我开始准备写代码时,突然意识到一个问题,进程的栈是一块连续的空间,有两个边界,那么是不是意味着有两个方向的溢出呢?我们知道,栈溢出通常是因为递归调用层次太深导致,那么为什么递归调用层... 阅读全文
摘要:
1. 线索化二叉树一颗有n个节点的二叉树,必然有n + 1个空指针,可以利用这些空指针记录二叉树的某种遍历序的前驱和(或)后继信息下面给出中序线索化二叉树的代码: 1 #include 2 3 struct ThreadTreeNode { 4 int val; 5 bool l... 阅读全文
摘要:
第一篇以一道简单的题目为背景介绍了线段树的基本结构和基本性质,这一篇我们使用线段树来解决几个常见的问题1. 查询区间最大(小)值支持两种操作:a. 修改某个点的值 b. 查询某个区间的最大(小)值 1 #include 2 #define N 1024 3 4 typedef struct { ... 阅读全文
摘要:
问题:先抛出一个问题,坐标轴上有若干线段,现在给定若干个点,对于每个点,求出包含点的线段的数量如果用常规的解法,时间复杂度是O(mn),空间复杂度是O(m + n)能不能降低一下时间复杂度呢?答案是肯定的,这些线段里有大量相交或者覆盖的线段,而上面的解法显然没有利用这些信息,导致时间复杂度较高,现在... 阅读全文
摘要:
上一篇讨论了链表的反转问题,这一篇讨论链表排序的问题1. 排序两个有序链表比较简单,属于归并排序,不再赘述时间复杂度O(n), 空间复杂度O(1) 1 ListNode *mergeList( ListNode *list1, ListNode *list2 ) { 2 if(!list1 ... 阅读全文
摘要:
上一篇讨论了链表相关的几个有趣的问题,这一篇主要讨论与反转链表有关的问题基本数据结构:struct ListNode { int var; ListNode *next; ListNode( int v = 0 ) : var(v), next(NULL) { }};1. 反转链表... 阅读全文
摘要:
上一篇文章实现了链表的基本数据结构,这一篇谈一谈关于链表的一些有趣的题目首先给出链表节点的数据结构1 struct ListNode {2 int var;3 ListNode *next;4 ListNode(int v = 0 ) : var(v), next(NULL)... 阅读全文
摘要:
参考 http://www.cnblogs.com/skywang12345/p/3561803.html在此致谢!采用C++,实现了单链表和双向循环链表:1. 单链表 1 #ifndef SINGLE_LIST_H 2 #define SINGLE_LIST_H 3 4 #ifndef ... 阅读全文
摘要:
作为一名Linux小白,第一次看到a.out这个名字,感觉实在是奇怪,搜了一下才知道这是编译器输出的默认可执行文件名然后vi一下,哇,各种乱码,仔细看看,发现了三个清晰的字符ELF。继续搜索, 第一感觉就是这就是windows下的*.exe顺便看到了readelf这条命令,就读了一下这个文件,发现这... 阅读全文
摘要:
Hello World! 阅读全文