题目:输入一颗二叉树的根结点,判断该二叉树是不是平衡二叉树。平衡二叉树是满足所有结点的左右子树的高度差不超过1的二叉树
方案一:遍历数组的每一个结点,对每一个结点求它的左右子树的高度并进行判断。时间复杂度大于O(n),小于O(n^2)效率较低,因为有很多点需要重复访问。
//二叉树的结点
struct BinaryTreeNode{
int m_value;
Bin...
分类:
其他好文 时间:
2014-05-26 04:34:53
阅读次数:
192
删除链表结点注意保证链表不会断开。删除的节点是尾结点时,并不能保证是O(1)时间。但平均下来时间复杂度仍然保持在O(1)。...
分类:
其他好文 时间:
2014-05-26 03:38:22
阅读次数:
166
第一部分 选择题(共20分)一、单项选择题(本大题共8小题,每小题2分,共16分)
1.某算法的空间花费s(n)=100nlog2n+0.5n1.5+1000n+2000,其空间复杂度为[ ] A.O(1) B.O(n) C.O(n1.5)
D.O(nlog2n) 2.在单项链表中删除一个指定结点....
分类:
其他好文 时间:
2014-05-26 02:49:34
阅读次数:
194
二分查找也是分治策略和递归一个重要的实例。对于一个有序的数组,二分查找的时间复杂度是O(logn)int binarysearch(int a[],int
s,int e,int k){ int mid =(s+e)/2; if(k==a[mid]) return mid;...
分类:
其他好文 时间:
2014-05-26 02:23:44
阅读次数:
170
特点:1.是冒泡的改进2.是一个递归的过程3.不稳定4.时间复杂度:O(nlogn)设要排序的数组是A[0]...A[n-1],首先取数组的第一个数作为关键数据,然后将所有比它小的数都放到它的前面,比他大的都放到他的后面,这个过程被称为一趟快速排序算法步骤:1.设置两个变量i,j,排序开始i
= 0...
分类:
其他好文 时间:
2014-05-26 01:48:16
阅读次数:
282
题目链接
第一次写nlogn复杂度的LIS,纪念一下。
题目意思是说。有两条平行线,两条平行线都有n个城市,都是从左到右标记为1--n,一条线上是富有城市,一个是贫穷城市。输入n,接下来有n行,p,r表示穷城市p和富有城市r
之间可以建一条路(p的顺序是1--n,一个贫穷城市只对应一个富有城市(弱爆的语文描述能力T_T)),公路不能交叉。
问最多可以建多少条公路。
...
分类:
其他好文 时间:
2014-05-25 09:58:28
阅读次数:
256
很少用bfs进行最短路搜索,实际BFS有时候挺方便得,省去了建图以及复杂度也降低了O(N*M);UVA 11624 写的比较挫#include #include
#include #include using namespace std;struct node{ int ft; int ...
分类:
其他好文 时间:
2014-05-25 03:23:54
阅读次数:
210
字典树Trie
Trie,又称字典树,前缀树(prefix tree),是一种树形结构,用于保存大量的字符串。
它的优点是:利用字符串的公共前缀来节约存储空间。查找、插入复杂度为O(n),n为字符串长度。
它有3个基本性质:
1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。...
分类:
其他好文 时间:
2014-05-24 23:49:57
阅读次数:
346
题目:统计一个数字k在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次
方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n)
方案二:由于数组是有序的,那么我们可以利用二分的思想,求出k在数组中的第一个位置和最后位置相减即可。时间复杂度为O(logN)
注意严格按照良好的C++编码风格
#include...
分类:
其他好文 时间:
2014-05-24 21:09:24
阅读次数:
194
题目:输入一个整型数组,数组里除了两个数出现一次之外,其它所有数字出现的次数都是2次,求这两个数字。要求时间复杂度为O(n),空间复杂度为O(1)
1 题目要求时间复杂度为O(n)并且空间复杂度为O(1)。这个时候朴素的方法利用数字来记录出现次数的方案都是不行的。
2 根据题目的特点,只有两个数出现一次,其它的所有数据都是出现2次。如果这两个数是a和b,那么对这个数组异或的结果就是a^...
分类:
其他好文 时间:
2014-05-24 14:17:24
阅读次数:
258