思路一:采用递归的方法,每个节点访问一遍,时间复杂度O(n),空间复杂度O(n) 思路二:非递归实现,过程中使用了栈,时间和空间复杂度同上 思路三:采用morris遍历方式,时间复杂度同上,但是空间复杂度O(1):算法理解在此 关键在于将当前子树的中的最大值(最后遍历)的右指针指向根节点,以便于左边 ...
分类:
其他好文 时间:
2017-04-01 20:28:26
阅读次数:
203
一个数组内有正数和负数,而且数组是循环的。求数组内最大子数组的和。要求数组是算法空间复杂度为O(1)。 思路: 1.求出每个子数组的值,比较大小。 2.定义一个参数,为数组的长度。 3.构造另外的数组,使得是原数组的得到两个集合。比如a={1,2,3,4}.b={1,2,3,4,1,2,3,4}; ...
分类:
编程语言 时间:
2017-03-31 20:56:09
阅读次数:
224
题目大意:给定一棵树,每个点有颜色和权值,支持修改一个点的颜色和权值,查询一条链上某种颜色的和与最大值。(n<=10^5) 思路:树剖一下,每种颜色开一棵线段树,动态开点,时间复杂度O(nlogn^2),空间复杂度O(nlogn)。 ...
分类:
其他好文 时间:
2017-03-30 23:32:05
阅读次数:
311
上一篇介绍了冒泡排序,现在介绍一下其他的排序算法 各种排序的稳定性,时间复杂度和空间复杂度总结: 3.选择排序 直接选择排序算法的思想比较简单:(假设数据放在一个数组a中,且数组的长度是N) 1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置 2:从a[1]-a[N-1]中选出最小 ...
分类:
编程语言 时间:
2017-03-30 17:09:45
阅读次数:
145
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增 ...
分类:
编程语言 时间:
2017-03-30 14:58:10
阅读次数:
239
基本过程: 代码实现: 算法性能分析: 时间复杂度:快速排序最坏的时间复杂度为O(n^2),平均时间复杂度为O(nlogn)。 空间复杂度:O(n)。 稳定性:由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。 ...
分类:
编程语言 时间:
2017-03-29 22:59:07
阅读次数:
204
最近整理了常用的排序算法,整理好,留下自己的思考过程。 1、冒泡排序: (1)平均时间复杂度:O(n2) (2)最好时间复杂度:O(n) (3)最坏时间复杂度:O(n2) (5)空间复杂度:O(1) (5)稳定性:稳定 (6)JavaScript实现: 2、选择排序: (1)平均时间复杂度:O(n2 ...
分类:
编程语言 时间:
2017-03-25 23:38:57
阅读次数:
173
目录: 1、为什么要用?(它的好处或优点) 2、原理是什么?(效果) 3、怎样去实现?(想马上看代码的同学点这里) 为什么要用? 1、时间复杂度: 平均情况 O(n2)、最坏情况O(n2),最好情况O(n) 2、空间复杂度: O(1) 3、稳定性: 稳定 4、复杂度:简单 容易实现 适用场景: 有序 ...
分类:
编程语言 时间:
2017-03-25 20:14:07
阅读次数:
206
目录: 1、为什么要用?(它的好处或优点) 2、原理是什么?(效果) 3、怎样去实现?(想马上看代码的同学点这里) 为什么要用? 1、时间复杂度: 平均情况 O(n2)、最坏情况O(n2),最好情况O(n) 2、空间复杂度: O(1) —— 可理解为一个变量 3、稳定性: 稳定 4、复杂度:简单 容 ...
分类:
编程语言 时间:
2017-03-23 22:14:07
阅读次数:
188
问题: 返回将一维数组向右旋转K个位置的结果。比如,一维数组{1,2,3,4,5},k=2时,返回结果是{4,5,1,2,3}。要求常数级空间复杂度,允许修改原有数组 看到一个比较巧妙的方法,将数组反转三次,第一次反转整个数组,第二次反转数组的前K个数,第三次反转数组剩下的数。 每次反转的时间为O( ...
分类:
编程语言 时间:
2017-03-22 17:50:55
阅读次数:
133