摘要: 艰难的通过了,好多边缘条件,一开始还把realCount[S.charAt(first) - 'A']--写成了realCount[first - 'A']--,还有second到达字符串尾时,first还可以往前推的,如果total==targetTotal了。算法是参照leetcode论坛里的, 阅读全文
posted @ 2013-08-02 00:36 阿牧遥 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 一开始直接用循环减法,会超时,网上看了下,就是除数倍增的方法,这样复杂度由n变成lg n。中间还要注意负数溢出的情况,直接用long了。public class Solution { public int divide(int dividend, int divisor) { // Start typing your Java solution below // DO NOT write main() function int ans = 0; boolean sign = true; i... 阅读全文
posted @ 2013-08-01 00:19 阿牧遥 阅读(819) 评论(0) 推荐(0) 编辑
摘要: 真不容易。不靠debug写出来的。纸上分析的时候,写下i和j为两行,然后一个一个的写下改变的值,这样可以找到bug。 #include <cstring> #include <malloc.h> using namespace std; class Solution { public: char * 阅读全文
posted @ 2013-07-31 23:43 阿牧遥 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 整体来看,KMP算法,在s中寻找p(p,pattern,s可能的子串)采用的思想是:1.预处理p,生成next数组;2.遍历中s的index不回溯,不匹配时下一个字符匹配p的next[j]字符,问题的复杂度由O(mn)下降到O(m+n)。;3.next数组有自动状态机的思想在里面;4.next数组其实是前缀数组的最前面和最后面共同的字符数。next数组有从-1开始的,有从0开始的。算法导论从0开始,但数组下标从1开始。我们采取从-1开始的,这样j=next[j]好写。以"ABCDABD"为例,- "A"的前缀和后缀都为空集,共有元素的长度为0;- &qu 阅读全文
posted @ 2013-07-31 21:20 阿牧遥 阅读(302) 评论(0) 推荐(0) 编辑
摘要: https://codility.com/demo/take-sample-test/delta2011/0-1背包问题的应用。我自己一开始没想出来。“首先对数组做处理,负数转换成对应正数,零去掉,计数排序统计有多少个不同元素及其对应个数,并累加所有数的和sum,不妨记b=sum/2,不同元素个数为m,则目标转换为在m个不同元素中挑出若干个元素(每个元素可以重复多次,但少于它们的出现次数),使得它们的和不大于b并尽量接近。到了这里,应该有点熟悉的感觉了吧。对了,其实这就是0-1背包问题!” 参考http://phiphy618.blogspot.jp/2013/05/codility-delt 阅读全文
posted @ 2013-07-31 20:14 阿牧遥 阅读(1538) 评论(0) 推荐(0) 编辑
摘要: 简单题。 public class Solution { public int removeDuplicates(int[] A) { // Start typing your Java solution below // DO NOT write main() function if (A.len 阅读全文
posted @ 2013-07-31 12:21 阿牧遥 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 有意思。此题最简单的解法是递归,在纸上画一下就看出来了。 class Solution { public: ListNode *swapPairs(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write 阅读全文
posted @ 2013-07-30 22:05 阿牧遥 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 此题一开始以为是k*n的复杂度。后来网上搜索了一下,发现有好思路,一是两两归并,这样是logk*n;另外是使用堆,复杂度一样。感觉是归并好写,就采用归并。 1. 归并两路不需要新建节点,其实就是把原有节点的指针交错一下即可;2.二级指针的使用还是不熟练,pplast的名字就是典型应用上一个指针的指针 阅读全文
posted @ 2013-07-30 21:58 阿牧遥 阅读(323) 评论(0) 推荐(1) 编辑
摘要: 简单题。DFS。还是用Java写函数麻烦了。一开始把left<n的条件忘了。 import java.util.ArrayList; public class Solution { public ArrayList<String> generateParenthesis(int n) { // St 阅读全文
posted @ 2013-07-29 22:59 阿牧遥 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 简单题。使用stack就行了。不过一开始忘了判断'['和']'的情况。要判断stack是否为空。 #include <string> #include <stack> using namespace std; class Solution { public: bool isValid(string 阅读全文
posted @ 2013-07-29 22:01 阿牧遥 阅读(158) 评论(0) 推荐(0) 编辑