题目:输入一颗二叉树的根结点,判断该二叉树是不是平衡二叉树。平衡二叉树是满足所有结点的左右子树的高度差不超过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
二分查找也是分治策略和递归一个重要的实例。对于一个有序的数组,二分查找的时间复杂度是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
1.RMQ问题
RMQ (Range Minimum/Maximum Query):对于长度为n的数组A,回答若干询问RMQ(A,i,j)(i,jRMQ问题是指求区间最值的问题。最简单的方法,就是遍历数组直接搜索,但是这种方式时间复杂度是O(n)。对于数组长度较大,性能要求高的场景不适用。
2.ST(Sparse Table)算法
ST算法是一种更加高效的算法,以O(nlog...
分类:
其他好文 时间:
2014-05-25 22:28:29
阅读次数:
375
题目:输入一个整数s,打印出所有和为s的连续整数序列(至少含有2个数)。例如输入9,则输出2、3、4和4、5两个序列
方案一:由于序列至少要2个数,则两个数上限值为(1+s)/2,我们可以枚举该序列的起点和终点求所有满足的序列。时间复杂度为O(n^2),效率比较低
方案二:我们设置两个指针start和end分别表示当前序列的起点和终点,并记序列和为sum。当sum = s的时候输出这个...
分类:
其他好文 时间:
2014-05-25 18:18:18
阅读次数:
191
寒假学的两个算法,普里姆,克鲁斯卡尔终于弄明白了,可以发总结了
先说说普里姆,它的本质就是贪心,先从任意一个点开始,找到最短边,然后不断更新更新len数组,然后再选取最短边并标记经过的点,直到所有的点被标记,或者说已经选好了n-1条边。
克鲁斯卡尔,一个排序一个并查集只是表面,实质还是贪心,只不过普里斯是任选一个点选最短路,而克鲁斯卡尔是看全局,全体边排序,当然,因为排序,导致时间复杂度不容易降下来。
拿SDUTOJ2144为例,代码如下,可做模板...
分类:
其他好文 时间:
2014-05-25 11:10:47
阅读次数:
256
题目:输入一个递增的排序的数组和一个数字s,在数组中查找两个数,使得它们的和为s。如果有多对满足条件的则输出任意一对即可
方案一:枚举两个数求和判断,时间复杂度O(n^2),显然效率太低
方案二:枚举第一个数,二分第二个数,时间复杂度O(nlogn),效率高了很多
方案三:设置两个指针p1,p2初始化指向数组的第一个数和最后一个数(即最小值和最大值),判断两个指针指向的两个数sum和...
分类:
其他好文 时间:
2014-05-25 10:03:37
阅读次数:
186
题目:统计一个数字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