上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 43 下一页
摘要: 不难。纸上画一下就知道规律了。public class Solution { public String countAndSay(int n) { StringBuilder last = new StringBuilder(); StringBuilder current = new StringBuilder("1"); int i = 1; while (i < n) { last = current; current = new StringBuilder(); ... 阅读全文
posted @ 2013-10-05 14:04 阿牧遥 阅读(155) 评论(0) 推荐(0)
摘要: 第一次mock,CollabEdit开一个页面,开始做题。题目是,有方法pow(m,n),m和n都大于1,给出N,有顺序的打印出前N个pow(m,n)的结果。前一个是:4,8,9,16,...然后在CollabEdit上写写画画,想思路,不得,开始紧张。拿起笔在纸上画,有些想法,但又觉得复杂度太高,不敢。先想的是,2^2之后,m和n都可以往+1的方向变。然后取其小的,但这样的话递归太多,而且有很多重复计算。经提示有重复计算后,第一反应DP,被否。后来提示得知是4,8,9之类的已经算过的就可以去掉了。(一开始我以为只要质数,马上遇上6^2==36的反例)所以用一个boolean数组记录是否可以去 阅读全文
posted @ 2013-10-04 00:38 阿牧遥 阅读(259) 评论(0) 推荐(0)
摘要: 这道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)
摘要: http://community.topcoder.com/stat?c=problem_statement&pm=11473&rd=14543简单的概率题。那道题想了想就出来了。每一轮中所有硬币都有相同的概率变化成另一面。public class CoinReversing{ public double expectedHeads(int N, int[] a) { double heads = N; double tails = 0; for (int i = 0; i < a.length; i++) {... 阅读全文
posted @ 2013-10-02 23:40 阿牧遥 阅读(173) 评论(0) 推荐(0)
摘要: http://community.topcoder.com/stat?c=problem_statement&pm=4471&rd=10711这题果然是道简单题,图+DP。拿道题便觉得可以用邻接表表示,然后想要找所有的,是不是要BFS,DFS搜索/遍历?又觉得到过的节点又能回去不好算。忽然间想到每个节点都来自旁边的节点,这样就有阶段了,马上出来状态转移方程,DP得解。public class UnsealTheSafe{ public long countPasswords(int N) { int[][] G = new int[10][]; G[0]... 阅读全文
posted @ 2013-10-02 23:16 阿牧遥 阅读(437) 评论(0) 推荐(0)
摘要: 今天遇到一个错误,叫Output Limit Exceeded。我还特地试了一下,当ArrayList里面添加超过9147个Interval后,就会有这个错误。所以这说明我的算法有误,没能merge对Interval,导致大数据测试时爆了。 (--)--(-)--( )--(--)-( ) ( ) 阅读全文
posted @ 2013-10-02 22:49 阿牧遥 阅读(843) 评论(0) 推荐(0)
摘要: 一开始不明白为什么有这么一道几乎完全一样的,但把I的改一下超时了,所以要优化一下。经搜索,发现可以这样优化:使用col[i]表示第i行Q所在的列,那么,判断斜线是否满足就可以用abs(k-i)== abs(col[k]-j),注意这里k要小于i,因为后面的行没有放Q,而默认初始化时0列放Q,就会错误。public class Solution { private int ans; private boolean[] visited; private int[] col; public int totalNQueens(int n) { ans = 0; ... 阅读全文
posted @ 2013-10-02 19:09 阿牧遥 阅读(186) 评论(0) 推荐(0)
摘要: N皇后,回溯法。然后想想怎么写呢?一开始想两个循环,但那就成了完全遍历,回溯法是可以剪枝一部分的。先想什么作为阶段,可以选第i行的Q做为回溯的阶段,选好某行后向选下一行的,用递归。public class Solution { private ArrayList ans = new ArrayList(); public ArrayList solveNQueens(int n) { ans.clear(); int[][] board = new int[n][n]; sub(board, 0); return ans; ... 阅读全文
posted @ 2013-10-02 18:11 阿牧遥 阅读(211) 评论(0) 推荐(0)
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 43 下一页