动规基础:最长递增子序列的三种解法。附详解和代码。第一种:转化成LCS问题求解O(n*n)。第二种:设d[i]为以第i个元素结尾的最长递增子序列的长度O(n*n)。第三种:二分查找优化O(nlogn)。...
                            
                            
                                分类:
其他好文   时间:
2014-05-10 08:36:18   
                                阅读次数:
462
                             
                    
                        
                            
                            
                                凸包:把给定点包围在内部的、面积最小的凸多边形。
本文介绍求解二维凸包的O(nlogn)的Andrew算法和少量例题,以及代码模板。...
                            
                            
                                分类:
其他好文   时间:
2014-05-07 22:55:55   
                                阅读次数:
600
                             
                    
                        
                            
                            
                                该算法基于一个简单的操作: 
将两个有序的队列合成一个更大的有序队列。归并排序保证NlogN。原地归并的抽象算法(Abstract in-place merge):using 
System;namespace MergeSort{ class Program { static...
                            
                            
                                分类:
其他好文   时间:
2014-05-06 14:34:28   
                                阅读次数:
325
                             
                    
                        
                            
                            
                                Array和List的区别在于前者可以随机访问,而后者只能顺序访问。对于把排好序的array转成BST,可以用top-down的方式,很直观也很自然,时间复杂度是O(n)。而对于List如果采用同样的方式,每次需要顺序遍历到中间节点,时间复杂度变成O(nlogn),如果换一种思路,down-top,...
                            
                            
                                分类:
其他好文   时间:
2014-05-05 09:34:29   
                                阅读次数:
454
                             
                    
                        
                            
                            
                                最长公共子序列经典问题,由于题的条件特殊,可转换成LIS问题,可在O(nlogn)内得到解决。根据刘汝佳大大的,加上自己的理解,不太理解的童鞋可以看一看(前提:已掌握LIS问题和LCS问题的解法)...
                            
                            
                                分类:
其他好文   时间:
2014-05-04 08:46:48   
                                阅读次数:
339
                             
                    
                        
                            
                            
                                29:数组中出现次数超过一半的数字 方法a. 排序取中 O(nlogn) 方法b. 
partition 函数分割找中位数 >=O(n) 方法 c. 设计数变量,扫描一遍。 O(n)#include int findNumber(int 
data[], unsigned length){/* if(c...
                            
                            
                                分类:
其他好文   时间:
2014-05-02 19:47:41   
                                阅读次数:
535
                             
                    
                        
                            
                            
                                29. 数组中出现次数超过一半的数字. 方法a. 排序取中 O(nlogn). 方法b. 
partition 函数分割找中位数 >=O(n). 方法c. 设计数变量,扫描一遍。 O(n).#include bool Invalid_Input 
= false;int getNumber(int da...
                            
                            
                                分类:
其他好文   时间:
2014-05-02 10:46:15   
                                阅读次数:
340
                             
                    
                        
                            
                            
                                在初次接触排序算法稳定性这个概念时,我一直认为复杂度为O(n2)的算法是稳定的,复杂度为O(nlogn)的算法是不稳定的。当时是这样理解的,复杂度为O(n2)的算法不可能再坏,而复杂度为O(nlogn)的算法在极端情况下可能会退化为O(n2),例如快速排序。但其实这是错误的,稳定性的概念远没有这么复杂,它只表示两个值相同的元素在排序前后是否有位置变化。如果前后位置变化,则排序算法是稳定的,否则是不...
                            
                            
                                分类:
其他好文   时间:
2014-05-01 17:20:58   
                                阅读次数:
278
                             
                    
                        
                            
                            
                                原题地址:http://oj.leetcode.com/problems/sort-list/题意:链表的排序。要求:时间复杂度O(nlogn),空间复杂度O(1)。解题思路:由于题目对时间复杂度和空间复杂度要求比较高,所以查看了各种解法,最好的解法就是归并排序,由于链表在归并操作时并不需要像数组的...
                            
                            
                                分类:
编程语言   时间:
2014-04-30 15:09:41   
                                阅读次数:
428
                             
                    
                        
                            
                            
                                最长上升子序列:
有两种基本方法:两个时间复杂度分别为O(n^2)和O(nlogn)。
O(n^2)
容易的出动态规划的递推公式dp[i]=max(dp[j])+1 j=1,2...i-1,dp[i]是以元素i结尾的最长子序列个数。
在O(n^2)的最长上升子序列中可以通过记录每个元素前缀元素位置的方式来得到整个的最长上升子序列。
代码:int LISOn2(int a[],int to...
                            
                            
                                分类:
其他好文   时间:
2014-04-29 13:24:22   
                                阅读次数:
314