- 博客(122)
- 收藏
- 关注
原创 Sorting_Searching 叠罗汉 @CareerCup
类似前面的一道堆箱子普适的解法是回溯,注意这类是求最值的回溯题。另一种解法是LIS,先把其中一维排序,然后对剩下的一维进行LISpackage Sorting_Searching;import java.util.ArrayList;import java.util.Collections;/** * A circus is designing a tower r
2013-11-30 04:36:20 2323
原创 Sorting_Searching 有序矩阵中查找数 @CareerCup
要点就是从右上角或者左下角开始找,每次比较能排除一行或者一列package Sorting_Searching;import CtCILibrary.AssortedMethods;/** * *Given a matrix in which each row and each column is sorted, write a method to find an
2013-11-30 02:20:37 1593
原创 Sorting&Searching 二分法找有空字符串的数组 @CareerCup
要点是找到最近的不是空字符串的位置,然后作为mid,再继续二分package Sorting_Searching;/** * Given a sorted array of strings which is interspersed with empty strings, * write a method to find the location of a given stri
2013-11-29 14:58:56 1397
原创 Sorting&Searching 旋转数组二分法查找 @CareerCup
就是3种情况,写在注释里了package Sorting_Searching;/** * Given a sorted array of n integers that has been rotated an unknown number of * times, give an O(log n) algorithm that finds an element in the ar
2013-11-29 14:30:19 1316
原创 Sorting&Searching 基于变位词的字符串数组排序 @CareerCup
两种排序结果不一样。。。1 实现Comparator接口的compare方法,在里面先把每个string都排序一遍,然后再比较2 用一个Hashtable>的结构,String为排序后的确定的string,LL里面装着各种anagram的变种package Sorting_Searching;import java.util.Arrays;import java.util
2013-11-29 14:09:43 2045
原创 Soring&Searching 合并两个有序数组 @CareerCup
merge,要点是从后往前走package Sorting_Searching;import CtCILibrary.AssortedMethods;/** * You are given two sorted arrays, A and B, and A has a large enough buffer at * the end to hold B. Write a m
2013-11-29 13:50:17 1240
转载 剑指offer面试题总结
http://www.aachin.info/tech/%E5%89%91%E6%8C%87offer%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93%EF%BC%881%EF%BC%89/面试题3:查找排序二维数组面试题4:替换空格为%20扩展1-复制排序数组B至尾部有足够空余空间的排序数组A。 (我记得我最近一次感叹逆序思
2013-11-29 13:27:18 2587 2
原创 两道递归/回溯好题的分析:printSquares,maxSum
回溯的题目总是有套路的,结合《递归分解的一些方法 和 回溯 笔记》一文,基本上可以套用这个模板来解决回溯题目。bool solve(configuration conf){ if(no more choices){ // BASE CASE return (conf is goal state); } for(all avail
2013-11-29 12:01:08 2954
原创 递归分解的一些方法 和 回溯 笔记
1 当前处理第一个或最后一个,对其余的递归2 一分为二,对两边做递归3 在一系列选择中做一个选择,对更新的状态做递归
2013-11-28 03:03:56 2663
原创 如何杀死Chrome进程并重启Chrome
总结一下,Chrome被杀死后就无法重启了,想要重启,必须先安装Unlocker,然后在C:\Users\\AppData\Local\Google选择unlock allLately my Google Chrome Browser started giving me lot of troubles. As I browse through pages, occasional
2013-11-28 02:41:50 11525
原创 Recursion 计算表达式的括号组合 @CareerCup
还没细看,先把代码放在这里package Recursion;import java.util.HashMap;/** * Given a boolean expression consisting of the symbols 0,1, &, /, and ^ , and a * desired boolean result value result, implement
2013-11-27 12:09:28 1547
原创 Recursion 叠箱子最高问题 @CareerCup
这类问题要多多画图package Recursion;import java.util.ArrayList;import java.util.HashMap;/** * You have a stack of n boxes, with widths wi, heights hi and depths di The * boxes cannot be rotated an
2013-11-27 11:40:41 2082
原创 Recursion 八皇后问题 @CareerCup
递归+回溯,不多说了。唯一要注意的是在每次记录一个可行的方案时,要复制一份数组,在Java中可以通过1 循环复制2 clone() 方法3 System.arraycopy() 方法这里按照书上,用了clone()方法!package Recursion;import java.util.ArrayList;/** * Write an algorithm t
2013-11-27 10:18:16 1264
原创 Recursion 硬币组合问题 @CareerCup
非常有意义的一道题,关键的一点要知道DFS是有顺序的,即在DFS中(5,1)和(1,5)是不一样的组合。所以对这道题我的第一种解法就重复算了多次,具体如图所示:当计算f(10)时,DFS给出的结果是9次,但实际上应该是4.去重的方法是多用一个变量(level)来限制条件。这样能保证在访问对于给定level只会深搜小于等于level的分支。同样参考了http://hawstein.c
2013-11-27 09:15:25 2256
原创 Recursion 图像软件中的“填充”函数 @CareerCup
搞清楚题意后就很简单了,用DFS暴搜即可package Recursion;/** * 原文:Implement the “paint fill” function that one might see on many image editing programs. That is, given a screen (represented by a 2-dimensiona
2013-11-27 05:44:18 1980
原创 Recursion n对括号的组合 @CareerCup
看不太习惯书上写的递归,觉得没有自己写的清晰。这道题唯一要满足的条件就是在任何时候,左括号数量一定要大等于右括号的数量。package Recursion;import java.util.HashSet;import java.util.Set;/** *Implement an algorithm to print all valid (e.g., properly
2013-11-27 05:20:32 1645
原创 Recursion 字符串的全排列 String Permutation @CareerCup
字符串全排列的题目,还是套用模板,同样要注意ret的size问题会变化。而且与上一题不同的是不光是要在ret后面添加进新的组合,而且还要移除前面用过的组合。类似一个队列。另外Java的substring中区间闭合情况是左闭右开 [ ) 所以想把一个字符串拆成两个区间就可以用这一句:for(int j=0; j<=tmp.length(); j++){ // substring
2013-11-27 05:03:11 2840
原创 Recursion 求所有子集 @CareerCup
这道题可以用递归和迭代两种方法来做。先说一下有收获的地方:在递归中,更经常的采用的是头递归,即调用先递归处理子问题,然后基于子问题的解再处理当前问题!并且这样还能减少stack中保存的内容。当然如果是比较简单的递归,即当前问题不依赖于子问题的解,如前面的那道findMagicIndex问题,就可以用尾递归。还有一点是,因为我在递归中ret值是不断往下传递的,所以
2013-11-27 01:53:30 2201 1
原创 Recursion 在数组中寻找神奇下标 @CareerCup
当数组里的元素没有重复时,因为数组已经是排序好的了,自然想到用二分法。如果数组里的元素有重复时,magic index可能出现在左侧也可能出现在右侧,这个画图举个例子就知道了。可以优化的是,无论是在左侧还是右侧,总有一些元素可以直接排除,从而缩短查找时间!package Recursion;import java.util.Arrays;import CtCILibra
2013-11-27 01:01:09 1889
原创 Recursion 二维空间里机器人向右或向下走的所有路径问题 @CareerCup
这道题学到了在做回溯时,先把点加入到path中,然后根据子情况来决定success这个变量,从而决定之前加入的点是否有必要的。如果子情况返回的是false,则这个点也没有必要加入到path中,就可以移除了。还有一个是,我的解答中每次函数只对当前点进行isFree的判断,官方答案中却对下一个节点进行判断。我还是觉得我的更直观一些。package Recursion;import
2013-11-26 14:17:18 1796
转载 荷塘月色
荷塘月色 作者: 朱自清 这几天心里颇不宁静。今晚在院子里坐着乘凉,忽然想起日日走过的荷塘,在这满月的光里,总该另有一番样子吧。月亮渐渐地升高了,墙外马路上孩子们的欢笑,已经听不见了;妻在屋里拍着闰儿,迷迷糊糊地哼着眠歌。我悄悄地披了大衫,带上门出去。 沿着荷塘,是一条曲折的小煤屑路。这是一条幽僻的路;白天也少人走,夜晚更加寂寞。荷塘四面,长着许多树,蓊蓊郁郁的。路的一旁,
2013-11-26 12:32:19 1304
原创 Recursion 爬楼梯问题 @CareerCup
开始CareerCup一书的刷题。。先从recursion这一章开始!我的解法:package Recursion;/** * A child is running up a staircase with n steps, and can hop either 1 step, 2 * steps, or 3 steps at a time. Implement a meth
2013-11-26 09:16:09 1981 2
转载 潘石屹早年工友:26年后他成了总裁我还在挑砖
图为:潘石屹这是一段多年前的回忆录,按说早已不算新闻。但这个与亿万富翁潘石屹有关的故事,却揭示了“富人之所以为富人,穷人之所以为穷人”的秘密。对广大创业者来说,其中的启示永不过时。讲述这段回忆录的是一个叫李勇的打工汉。26年前,他和潘石屹在深圳的南头边关相识,走深圳、闯海南,一起挑过砖,成了一对共患难的“苦友”。然而,如今的李勇仍然辗转各地打工,而潘石屹早已成为SOHO中国董事
2013-11-26 02:40:25 2130 1
原创 Convert Sorted List to Binary Search Tree 把有序链表转为BST@LeetCode
万能的递归法,注意到有一点比较巧的是,由于单链表都是单向的。所以这里我的查找区间设置为左闭右开!这样就避免了去找mid节点的前一个节点package Level4;import Utility.ListNode;import Utility.TreeNode;/** * Convert Sorted List to Binary Search Tree *
2013-11-25 10:27:52 5367 1
原创 Merge Two Sorted Lists 合并两个有序链表@LeetCode
之前做过这道题,没有用递归,做的非常痛苦。我就在想这是Level2的题怎么会怎么麻烦。。果然用了递归变得非常简洁!以后优先选择递归的解法(特别是链表和树的题目),如果不行再用迭代!package Level2;import Utility.ListNode;/** * Merge Two Sorted Lists * * Merge two sorted linke
2013-11-25 05:12:26 2729
原创 Reverse Nodes in k-Group k-group翻转链表@LeetCode
这种题目是要背下来的。。翻转单链表:ListNode dummy = new ListNode(0); dummy.next = head; ListNode pre = dummy; ListNode cur = head.next; ListNode last = head; while(cur != null){ las
2013-11-24 12:43:13 2251
原创 Simplify Path 简化文件路径@LeetCode
用栈来做,先把输入字符串以'/'为分隔符分来,如果遇到'.'或者空输入什么都不做。如果遇到'..'就弹栈。然后每从栈里退出一个元素就用'/'连接起来,注意顺序。发现Java里面的LinkedList实现了栈和队列的所有方法,而且还有重复的!值得注意的是,LinkedList中的pop()对应的是remove()或者removeHead() 即从链表头移除,而不是removeLast(
2013-11-24 11:38:22 5741 4
原创 Sudoku Solver 破解数独 @LeetCode 附DFS感想
典型DFS/递归/回溯/深搜题。对于DFS,说白了1) 什么时候返回?在本题中,1.当x>8或y>8 表示已经遍历完所有的格子,因此成功完成,返回true。2.当下一个搜索(子搜索)返回true,说明已经找到,返回true。 3.如果测试过本轮的所有可能解,但无一是对的,说明无解,返回false。 4.如果当前空格不是空格,则改变x,y坐标后,继续下一个空格的尝试2)DFS就是针对本轮
2013-11-24 11:00:55 4706 6
转载 M,BB面试+职业求教
http://www.mitbbs.com/article_t/JobHunting/32328493.html 发信人: sausages (smuggler), 信区: JobHunting标 题: M,BB面试+职业求教发信站: BBS 未名空间站 (Sat Feb 16 10:21:22 2013, 美东)传统工科,今年硕士毕业。去年开始有做码工的想法,在本版潜水
2013-11-24 09:22:57 1549
原创 Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序重建二叉树@LeetCode
同上一题,这一题是由inorder和postorder来确定树,对于postorder,root要从尾部开始找package Level4;import Utility.TreeNode;/** * Construct Binary Tree from Inorder and Postorder Traversal * * Given inorder and
2013-11-24 08:46:47 1692
转载 记毕业季的求职经历 remlostime
http://www.cnblogs.com/remlostime/p/3401015.htmlAccept的公司:Facebook, DeNA, SAP, Intel, ARMFail的公司:阿里巴巴,腾讯,百度,Google,微软,平安科技,豆瓣,雅虎,Amazon,NVIDIA,EMC,VMware,还有各种说不上名字的小公司今年(确切的说是从去年暑假开始)的
2013-11-24 08:06:30 1632
原创 Construct Binary Tree from Preorder and Inorder Traversal 从先序和中序重建二叉树@LeetCode
经典的题目,而且在实际中也有着用途,比如如何把一个二叉树序列化后通过网络传给另一台机器,我们就可以把二叉树以preorder和inorder的方式变成string传给另一台机器,另一台机器再重建二叉树。package Level4;import Utility.TreeNode;/** * * Construct Binary Tree from Preorder and
2013-11-24 06:22:51 2999 2
原创 Decode Ways 把字符串解码成数字组合@LeetCode
做这道题还是有很多收获的:1.为了避免麻烦,开数组时可以开大一些,如int[] ways = new int[len+10];2. 这道题实际上是和计算要几步走完台阶的那道题本质是一样的。同样要用动态规划3. 在拆分时,之前我一直在纠结如何处理0的为题,特别是对于输入是01,101,1001这样的数。后来才发现可以用10来判断,而不用对0去判断!具体过程:要求当前的index为
2013-11-24 05:05:21 3230 1
原创 Divide Two Integers 两数相除@LeetCode
思路清晰,就是二倍法。直接用除数去一个一个加,直到被除数被超过的话,会超时。解决办法每次将被除数增加1倍,同时将count也增加一倍,如果超过了被除数,那么用被除数减去当前和再继续本操作。因为一个很大的数经过对数处理后都能在可接受的大小内。比如Integer.MAX_VALUE 的log后也不过31.另外这道题很恶心的一点是在边界的处理,因为我们知道最大允许的负数的绝对值比最大允许的正
2013-11-23 14:27:23 4006 1
原创 一道DFS的小题: 部分和问题
部分和问题 (挑战程序设计竞赛)给定整数 a 1 、a 2 、…、a n ,判断是否可以从中选出若干数,使它们的和恰好为 k。 输入 n=4 a={1,2,4,7} k=13 输出 Yes (13 = 2 + 4 + 7) 输入 n=4 a={1,2,4,7} k=15 输出 No // 输入 in
2013-11-23 05:37:40 5588 5
原创 Binary Tree Maximum Path Sum 二叉树最大路径和 @LeetCode
很有难度的一道题,主要是最大和的可能性很多,不知道如何分情况。关键点1:分析:http://fisherlei.blogspot.com/2013/01/leetcode-binary-tree-maximum-path-sum.htmlFor each node like following, there should be four ways existing for max pa
2013-11-23 01:05:35 14644
原创 Merge Intervals 合并区间@LeetCode
采用的是和Insert Interval一样的思想,只不过最开头要先排序一下,用到了java的Collections.sort(List list, Comparator c)自己实现了一个Comparator的compare方法package Level4;import java.util.ArrayList;import java.util.Collections;im
2013-11-22 12:42:36 4926 3
原创 ZigZag Conversion 把一个字符串转为zigzag的表示形式@LeetCode
我发现有一类题目,比如这一道题,都是属于思路好想,但是很容易编程有bug的题目。要特别细心处理corner case。。。package Level3;import java.util.Arrays;/** * ZigZag Conversion * * The string "PAYPALISHIRING" is written in a zigzag patte
2013-11-22 12:05:45 3944
原创 Copy List with Random Pointer 复制有随机指针的链表@LeetCode
1 先画好图2 注意可能形成环的情况,因此必须拆成3个循环来做代码是按照 http://www.cnblogs.com/lautsie/p/3259724.html 的图来写的一个单链表,其中除了next指针外,还有一个random指针,指向链表中的任意某个元素。如何复制这样一个链表呢?通过next来复制一条链是很容易的,问题的难点在于如何恰当地设置新链表中的r
2013-11-22 10:34:18 6340
原创 Insert Interval 插入区间@LeetCode
动态合并的问题:通过遍历intervals,和newInterval对比:1 如果比newInterval小:直接加入新集合2 如果有overlap,动态改变newInterval为新的区间,继续合并3 如果比newInterval大:加入newInterval到新集合,然后把newInterval更新为当前对象之前在做第三步时,不懂得用动态改变newInterval的
2013-11-22 07:46:27 2652
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人