码迷,mamicode.com
首页 >  
搜索关键字:复杂度    ( 16171个结果
LeetCode OJ - Distinct Subsequence
这道题采用动态规划,可是我一开始没有想到。后来参考了discuss中前辈的代码和思路,才想通的。 方法二是因为每一步只和上一步的内容相关,所以可以只用O(n)的空间复杂度。下面是AC代码: 1 /** 2 * Solution DP 3 * we keep a m*n matri...
分类:其他好文   时间:2014-05-10 08:43:12    阅读次数:319
Randomize select algorithm 随机选择算法
从一个序列里面选择第k大的数在没有学习算法导论之前我想最通用的想法是给这个数组排序,然后按照排序结果返回第k大的数值。如果使用排序方法来做的话时间复杂度肯定至少为O(nlgn)。问题是从序列中选择第k大的数完全没有必要来排序,可以采用分治法的思想解决这个问题。Randomize select 算法....
分类:其他好文   时间:2014-05-07 19:23:35    阅读次数:394
LeetCode OJ - Recover Binary Search Tree
这道题要求空间复杂度为O(1),则只能采用Morris Traversal进行中序遍历!!这个了解了之后,难点在于如何定位到两个被交换了的节点?我就被困在这里几个小时!!!(允许我为自己的愚蠢表示下悲伤吧!!!)参考了discuss中前辈的算法,才发现很简单!!!我们只需要这样来看问题,BST的中序...
分类:其他好文   时间:2014-05-06 12:55:19    阅读次数:301
Leetcode: Two Sum
这道题看似简单,其实很坑爹啊,动不动就是Time Limit Exceeded, 比如我下面这段TLE的代码,我感觉方法是对的,但是too naive,算法复杂度到了O(N^2),自然就TLE了而且有一些小语法错误需要注意:for(runner=current+1;;)不能用>;一定所有的case都...
分类:其他好文   时间:2014-05-06 11:31:09    阅读次数:405
最短路径—Floyd算法
Floyd算法所有顶点对之间的最短路径问题是:对于给定的有向网络G=(V,E),要对G中任意两个顶点v,w(v不等于w),找出v到w的最短路径。当然我们可以n次执行DIJKSTRA算法,用FLOYD则更为直接,两种方法的时间复杂度都是一样的。1.定义概览Floyd-Warshall算法(Floyd-...
分类:其他好文   时间:2014-05-06 00:34:06    阅读次数:333
LeetCode OJ - Convert Sorted Array/List to Binary Search Tree
Array和List的区别在于前者可以随机访问,而后者只能顺序访问。对于把排好序的array转成BST,可以用top-down的方式,很直观也很自然,时间复杂度是O(n)。而对于List如果采用同样的方式,每次需要顺序遍历到中间节点,时间复杂度变成O(nlogn),如果换一种思路,down-top,...
分类:其他好文   时间:2014-05-05 09:34:29    阅读次数:454
求数组中和为给定值的任意两个数
题目: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 思路: 最直接的做法是暴力法,两个for循环,时间复杂度为O(n*n),但是这样没有充分利用升序数组这一前提。我们假设数组为A,长度为len,给定的和为sum,最好的方法是先用数组的第一个数A[lo...
分类:其他好文   时间:2014-05-04 17:56:57    阅读次数:596
poj3254(Corn Fields)状压dp
题意:在n*m(1 解法;很经典的状压模型。先将每一行的合法状态求出来,12的时候最多377个合法状态。然后进行与行之间的状态转移。最坏复杂度12*(377^2) 代码:/**************************************************** * author:xiefubao *********************************...
分类:其他好文   时间:2014-05-04 09:21:40    阅读次数:301
基数排序
时间复杂度 O(d*n),d 为不同数字数目,n 为待排元素个数。分为: MSD(most significant digit) 和 LSD(least significant digit)两种方法。MSD:从最高级别的 key 开始排序,每趟排序将所有元素分成 d 堆。LSD: 从最低级别的 k...
分类:其他好文   时间:2014-05-03 22:41:16    阅读次数:418
【算法编程】循环右移一个数组
仅用一个辅助节点将一个大小为n数组循环右移k位的三种办法: 1、时间复杂度最大:将所有元素每次只移动一位,总共移动k次,程序实现十分容易,在此就不具体实现了。 2、时间复杂度适中:依次将每个元素都放到辅助节点上,然后将其储存到目的节点,具体程序如下:...
分类:其他好文   时间:2014-05-03 21:39:14    阅读次数:250
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!