07 2013 档案
摘要:真不容易。不靠debug写出来的。纸上分析的时候,写下i和j为两行,然后一个一个的写下改变的值,这样可以找到bug。 #include <cstring> #include <malloc.h> using namespace std; class Solution { public: char *
阅读全文
摘要:整体来看,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
阅读全文
摘要: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
阅读全文
摘要:简单题。 public class Solution { public int removeDuplicates(int[] A) { // Start typing your Java solution below // DO NOT write main() function if (A.len
阅读全文
摘要:有意思。此题最简单的解法是递归,在纸上画一下就看出来了。 class Solution { public: ListNode *swapPairs(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write
阅读全文
摘要:此题一开始以为是k*n的复杂度。后来网上搜索了一下,发现有好思路,一是两两归并,这样是logk*n;另外是使用堆,复杂度一样。感觉是归并好写,就采用归并。 1. 归并两路不需要新建节点,其实就是把原有节点的指针交错一下即可;2.二级指针的使用还是不熟练,pplast的名字就是典型应用上一个指针的指针
阅读全文
摘要:简单题。DFS。还是用Java写函数麻烦了。一开始把left<n的条件忘了。 import java.util.ArrayList; public class Solution { public ArrayList<String> generateParenthesis(int n) { // St
阅读全文
摘要:简单题。使用stack就行了。不过一开始忘了判断'['和']'的情况。要判断stack是否为空。 #include <string> #include <stack> using namespace std; class Solution { public: bool isValid(string
阅读全文
摘要:简单题。唯一的小技巧是使用了指向指针的指针。 class Solution { public: ListNode *removeNthFromEnd(ListNode *head, int n) { // Start typing your C/C++ solution below // DO NO
阅读全文
摘要:DFS,用C会更合适一些,用Java就要传很多的引用。在我看来,这个DFS就是递归。import java.util.ArrayList;import java.util.HashMap;public class Solution { public ArrayList letterCombin...
阅读全文
摘要:此题是Two Sum的变种,Two Sum能从O(n^2)优化到O(n)。那么此题能从O(n^3)优化到O(n^2)。就是少了那一维n。此处要注意:1.当有重复的数字时,要跳过;2.找好一个数字去寻找另外两个数字时,只需从右边部分寻找就行,否则会重复。import java.util.ArrayLi...
阅读全文
摘要:水题。一个一个字符串比较就是了。public class Solution { public String longestCommonPrefix(String[] strs) { // Start typing your Java solution below // DO NOT write main() function if (strs == null || strs.length == 0) return ""; String s = strs[0]; for (int i = 1; i < strs.length; i+...
阅读全文
摘要:此题一开始看错了,后来才发现由小的一根(短板)决定高度。中间看过网上的解答,思路是O(n)的,略巧妙。其实就是基于这样一个直觉,先把L1设为最左,R1设为最右,这样宽度最大,然后缩小宽度,那么高度就要比原来高。缩小宽度的逻辑是,如果L1比R1小,那么L1往右移,否则反之。可以做简单证明。 如图,L1
阅读全文
摘要:此题有难度。一开始是用循环往前p和s贪心来做,代码已经很复杂,但处理依然有(大)错。如aaab配a*ab 和babc配.*c的情况无法处理。看了网上的资料后才认定这种情况必须要全面回溯匹配,这种情况下最适合的就是递归了。默默的写程序,中间有漏过*s!=0的判断,但几次修改后居然通过了,小激动。参考:...
阅读全文
摘要:普通题。需要注意的是反转时的溢出。还有正负符号。(居然我没有特别加正负的判断也过了... 想了一下才发现根据我的代码负数的时候都会抛Exception,歪打正着。)public class Solution { public boolean isPalindrome(int x) { // Start typing your Java solution below // DO NOT write main() function try { int r = reverse(x); if (r == x) { ...
阅读全文
摘要:水题。需要注意的是特殊情况考虑。一是前面的空格,二是最后的非数字字符,三是正负符号(我考虑了负号,忘记了正号),四是溢出,而且溢出还分两种,一是2147483649这样的溢出,二是10000000000这样的溢出,多一位(我只考虑了一种)。五是空字符串。最终代码pass,但其实还忘了处理null。代码如下:public class Solution { public int atoi(String str) { // Start typing your Java solution below // DO NOT write main() function ...
阅读全文
摘要:水题。但题下的注释还是有点启发的,一个是比如120反转,一个是反转后有可能int溢出。前者不需要特殊处理,后者需要clarify,如果发生是否以另一个参数传出或抛出异常。public class Solution { public int reverse(int x) { // Start typing your Java solution below // DO NOT write main() function int result = 0; boolean neg = false; if (x < 0) { ...
阅读全文
摘要:水题。主要就是画画图,找找规律。稍微要注意的是:1. nRow为1的情况;2. 采用变量index方便边界判断public class Solution { public String convert(String s, int nRows) { StringBuilder sb...
阅读全文
摘要:此题我曾经做过类似的(http://hi.baidu.com/lautsie/item/459a182eeddc568e6f2cc34a)但还是忘了,可见这个算法还是很tricky的。其实O(n^2)的算法还是能想到的,就是遍历每个字符,然后从该字符向两旁扩,寻找最长子串。但居然有O(n)的方法,见
阅读全文
摘要:纯水题,想来想去指针链表类题目怎么都还是C++比较好。环境里默认没有NULL,就先用0代替了。觉得风格比较烂。后找到一个更精炼的代码,一是使用二级指针,省了一个前向变量,二是二链表同时前进结束后,做个简单判断,就不用两个while了。三是进位不知道,随便起了个up,其实overflow或是carry都要好多了。本人的代码:class Solution {public: ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { // Start typing your C/C++ solution below /...
阅读全文
摘要:此题一开始以为是一个水题呢,以为只要一个index往后移动就行。但后来发现漏了一个大情况,"abcadef",最长应当是"bcadef"而不是“adef"。所以需要两个指针,begin和end。1.对于这种两个指针,一个追着一个跑的,可以用一个while循环,end和start分别步进,当start赶上end时,再动end的写法;2.只有当end步进时,才需要将c放入map;3.看到网上很多人是用标志数组来存放上一次的index,会稍微省点空间和时间吧,但归根结底空间也是O(n)的,而且当字符时unicode的时候将不太好适用。(这个可以先确认
阅读全文
摘要:There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).1. 第一次看到此题时,我的想法是现在A中折半查找缩小范围,比如取得A的中间数A[i],然后在B中找到A[i],然后便可以缩小范围。A中没有再找B。这个与最后的推荐做法有些类似。2. 错误或当时没想清楚的是,在B中找A[i]需要log(n)的时间,但其实不需要找A[i],直
阅读全文
摘要:本来以为是一道水题,结果居然能从n^2, n*log(n)一直优化到n。感慨啊~O(n^2): 暴力public class Solution { public int[] twoSum(int[] numbers, int target) { // Start typing your Java solution below // DO NOT write main() function int[] r = new int[2]; for (int i = 0; i l) { if (sum > targe...
阅读全文
摘要:1. 搞了好久,最后发现是cnd变量没有在每次最后统计时重置。大问题一般经常出现在小地方;2. 可以用while(c--)来给test的数量计数;3. 学习了线段树的离散化思想4. 再给线段树更新时,要注意条件。比如此处的做法是个可行的,检测是否全部覆盖,半覆盖还是未覆盖等。5. 用-1, 0, 其他 来表示各种着色情况。参考:http://www.cppblog.com/Johnnx/archive/2009/10/13/96434.html?opt=adminhttp://blog.csdn.net/lyy289065406/article/details/6799170#include
阅读全文
摘要:并查集经典题1. 向量的思考模式2. 再计算向量时,要画图;有一个关系一开始写错了3. 本人的norm函数一开始x >= 3写成了 x>3,应该对这种小函数多做UT(口头上的,比如)4. 可以把father set一开始memset为-1参考链接http://blog.csdn.net/tiantangrenjian/article/details/7085575http://pdjlzs.diandian.com/post/2012-02-03/15719424#include using namespace std;#define ANI_MAX (50000 + 10)int
阅读全文
摘要:第一次写DFS的程序,虽然是个水题。1. 学了memset2. 可以存下来A-Z的各个次方的结果3. 可以排序优化4. 我用了t[0]==0来判断是否有解,也可设个flag5. 用了递归,也可用五层循环#include #include using namespace std;int n;int len;char s[15];int vis[15];int t[5];int p[5];void check(){ for (int i = 0; i t[i]) { for (int j = 0; j > n >> s; if (n == 0) { return 0; } le.
阅读全文
摘要:快弄死我了 最后的原因是abs和fabs的区别。。。说点收获:1.cmp函数返回的是int,所以不要直接返回double相减的结果2.define inf 1e9和eps 1e-93.在整数相除得到double时要1.0*4.加上 ,用fabs取代abs,abs是用来整数取绝对值,应该用fabs5.思路上,本题可从线的角度考虑转化为从点的角度考虑,这样变为N^2,然后不用hash,然后对斜率,用排序,又有logN。最后为O(N^2*logN)6.注意边界情况7.最后找错的时候采用了随机数数据和传说中正确的代码做比较,发现它们也还是有错,只是数据弱而已8.下面的Discuss还是很有用的9. G
阅读全文

浙公网安备 33010602011771号