内容要点: 可以将上次的计算结果缓存起来。在函数式编程当中,这中缓存技巧叫做 "记忆"。 需要注意的是,记忆只是一种编程技巧,本质上是牺牲算法的空间复杂度以换取更优的时间复杂度,在客户端JS中代码代码执行的时间复杂度往往成为瓶颈,因此在大多数场景下,这种牺牲空间换取时间的做法以提升程序执行效率的做法 ...
分类:
Web程序 时间:
2016-09-02 14:43:38
阅读次数:
168
要求: 实现删除当前顺序表中所有值为x的数据元素,并使此操作的 时间复杂度为O(n),空间复杂度为O(1),其中n为顺序表的长度 思路: 遍历一遍时间复杂度O(n),删除一个值时间复杂度O(n),所以肯定遍历时删除肯定不符合要求。 所以通过设置计数变量K,遍历时改变数组值。 ...
分类:
其他好文 时间:
2016-08-31 23:47:43
阅读次数:
157
时间复杂度为O(n*n),空间复杂度为O(n)的解法 1 // ShortJobFirst.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <vector> 7 8 using na ...
分类:
编程语言 时间:
2016-08-28 23:42:24
阅读次数:
220
题目描述:查找最小的k个元素,输入n个整数,输出其中最小的k个。 一般的排序方法,如快排,时间复杂度为O(n*logn+k); 大顶堆方法,时间复杂度为O(k+(n-k)*logk); 如果建立k个元素的最小堆的话,那么其空间复杂度势为O(N),而建立k个元素的最大堆的空间复杂度为O(k); 当面对 ...
分类:
其他好文 时间:
2016-08-28 11:00:37
阅读次数:
495
1.直接插入排序 1)时间复杂度:T(n)=O(n^2); 2)空间复杂度:S(n)=O(1); 3)简介:直接插入排序是一种最基本的插入排序方法,直接插入排序(Straight Insertion Sorting)的基本思想是把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个 ...
分类:
编程语言 时间:
2016-08-27 14:12:21
阅读次数:
154
1、快速排序 又称分治算法,分治的基本思想是蒋原问题分解为若干个规模更小但结构与原问题相似的子问题,然后递归地解决这鞋子问题,子问题的结组合为原问题的解。 快速排序是一种不稳定的算法,平均时间复杂度为O(n log n),最差情况是O(n^2),空间复杂度O(log n) (1)基本思想 过程如下: ...
分类:
编程语言 时间:
2016-08-24 19:16:08
阅读次数:
232
转自:http://blog.csdn.net/wumuzi520/article/details/7841280 给定一个数组a[N],我们希望构造数组b [N], 其中b[j]=a[0]*a[1]…a[N-1] / a[j], 在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间 ...
分类:
编程语言 时间:
2016-08-24 17:04:30
阅读次数:
214
概述 对于程序员来说多多少少都懂一点算法,算法是什么?算法是“时间”与“空间”的互换策略。 我们常常研究一个算法的时间复杂度和空间复杂度,如果我们有绝对足够的时间和空间,那么算法就不需要了,可惜这种条件是不存在的,只是在某些情况下我们会协调两者从而达到性能上的平衡。 缓存是一种“用空间换时间”的策略 ...
分类:
其他好文 时间:
2016-08-21 19:49:31
阅读次数:
155
归并算法:实现排序。 归:递归。并:合并。 如何递归,如何合并? 使用归并算法的优点:算法的时间复杂度和空间复杂度低。 ...
分类:
编程语言 时间:
2016-08-19 13:07:35
阅读次数:
329
题目: 最开始采用暴力解法,两个for循环遍历所有组合形式,时间复杂度为O(n2),代码省略。 进一步学习,采用hash表存储,空间换时间,时间复杂度为O(n),空间复杂度为O(n); 将数组放入hash表中,利用for循环遍历数字中元素并从hash表中找到对应的数。因为从hash表中取数的时间复杂 ...
分类:
其他好文 时间:
2016-08-19 12:49:33
阅读次数:
134