摘要:        
这道4Sum,如果用3Sum类似的方法,是O(n^3)的复杂度。现在使用O(n^2)的空间呢,能达到O(n^2)的时间复杂度。但实现起来坑还是不少,一是要去重,用了string来表示集合的key;二是不能同一个索引位置的数(num[i])出现两次,所以要做下标的检查;三是当左右相加等于target的时候,现在不能直接跳过大小一样的,因为同样大小的可能是a+b也可能是c+d,就要l++和r--递归来做。但用递归有可能爆栈(Runtime Error),就用了Stack来模拟递归。最终Java 1472ms过。后来参考方勤的版本,如果用map来存sum=>pair,在只求解(而非全部解)的情    阅读全文
posted @ 2013-10-03 22:47
阿牧遥
阅读(843)
评论(0)
推荐(0)
        
            
        
        
摘要:        
http://community.topcoder.com/stat?c=problem_statement&pm=11282&rd=14724这道题是最小生成树,但怎么转化是关键。首先是把所有的路都destroy掉,得到基本的MassiveCost,然后在选MST的过程中,遇上这些边相当于还回去,它们的cost就是-destroy[i][j]。这样转化完毕。用Kruskal来做,注意生成Edge的过程,第二层循环j要从i+1开始,主要是避免把i到i的路也放进去。此题算是比较经典的K算法的题了。(没有用并查集)import java.util.*;public class Ki    阅读全文
posted @ 2013-10-03 11:08
阿牧遥
阅读(259)
评论(0)
推荐(0)
        
            
        
        
摘要:        
http://community.topcoder.com/stat?c=problem_statement&pm=5869&rd=8078这道题有点意思,思考理解后,就是找数组中的数A[i]满足:左边的都比它小,右边的都比它大。所以从左向右扫,不断记录更新max值,对不满足的标记false;然后从右向左扫就行了。public class BinarySearchable{ public int howMany(int[] sequence) { if (sequence.length == 0) return 0; int len = sequence...    阅读全文
posted @ 2013-10-03 00:28
阿牧遥
阅读(235)
评论(0)
推荐(0)
        
 
                    
                
 浙公网安备 33010602011771号
浙公网安备 33010602011771号