04 2014 档案

摘要:这道题要求的一个min和一个max,只是这个min所在的位置要在max所在位置的左边。有一种做法是采用蛮力算法,也就是通过从左往右遍历,把每一个元素都当做min,然后再在这个元素的右边找一个最大值,这样得到一个profit,最后求得所有情况中profit的最大值即刻。但是这种做法的时间复杂度是O(n... 阅读全文
posted @ 2014-04-30 22:41 echoht 阅读(140) 评论(0) 推荐(0) 编辑
摘要:这道题需要注意的地方有以下一些:1. 求从子树中的某节点到当前节点的最大路径不能采用递归方法,因为这个部分会被反复的调用,如果用递归,会使得之前已经计算过的节点被重复计算,使得时间复杂度特别高;2. 树中有节点的值是负数的。下面是AC代码。(我发现AC并不代表代码真的完全正确!!) 1 /** 2 ... 阅读全文
posted @ 2014-04-30 15:53 echoht 阅读(121) 评论(0) 推荐(0) 编辑
摘要:这道题挺简单的,但是需要细心。最好的方法是先对string做预处理,然后再判断是否是回文。下面是AC代码: 1 /** 2 * Given a string, determine if it is a palindrome, considering only alphanumeric ch... 阅读全文
posted @ 2014-04-30 12:49 echoht 阅读(109) 评论(0) 推荐(0) 编辑
摘要:我发现在leetcode上做题,当我出现TLE问题时,往往是代码有漏洞,有些条件没有考虑到,这道题又验证了我这一想法。这道题是在上一道的基础上进一步把所有可能得转换序列给出。同样的先是BFS,与此同时需要一个hashMap记录下每个节点,和他所有父节点的对应关系,然后通过DFS,回溯所有可能的路径。... 阅读全文
posted @ 2014-04-30 10:45 echoht 阅读(167) 评论(0) 推荐(0) 编辑
摘要:我觉得这道题比较难,主要是因为对于我来说:1. 我没有把这个问题联想到树的宽度遍历(即便没有考虑树的宽度遍历,也是可以做的,但是我一开始实现的代码却是深度遍历,后来发现树的BFS一般使用queue实现的,貌似没有递归的方法??)2. 即使在意识到用BFS,却还有一个陷阱:我是对字典进行了BFS,这个... 阅读全文
posted @ 2014-04-29 23:46 echoht 阅读(168) 评论(0) 推荐(0) 编辑
摘要:这道题中要求时间复杂度为O(n),首先我们可以知道的是,如果先对数组排序再计算其最长连续序列的时间复杂度是O(nlogn),所以不能用排序的方法。我一开始想是不是应该用动态规划来解,发现其并不符合动态规划的特征。最后采用类似于LRU_Cache中出现的数据结构(集快速查询和顺序遍历两大优点于一身)来... 阅读全文
posted @ 2014-04-27 13:44 echoht 阅读(165) 评论(0) 推荐(0) 编辑
摘要:这道题也很简单,只要把二叉树按照宽度优先的策略遍历一遍,就可以解决问题,采用递归方法越是简单。下面是AC代码: 1 /** 2 * Sum Root to Leaf Numbers 3 * 采用递归的方法,宽度遍历 4 */ 5 int result=0; 6... 阅读全文
posted @ 2014-04-27 13:36 echoht 阅读(122) 评论(0) 推荐(0) 编辑
摘要:我觉得这道题和传统的用动规或者贪心等算法的题目不同。按照题目的意思,就是将被‘X’围绕的‘O’区域找出来,然后覆盖成‘X’。那问题就变成两个子问题:1. 找到‘O’区域,可能有多个区域,每个区域‘O’都是相连的;2. 判断‘O’区域是否是被‘X’包围。我采用树的宽度遍历的方法,找到每一个‘O’区域,... 阅读全文
posted @ 2014-04-27 13:33 echoht 阅读(192) 评论(0) 推荐(0) 编辑
摘要:这道题采用动态规划毫无疑问,如果直接DP的话时间复杂度为O(n^3),会报TLE错误。需要把时间复杂度降到O(n^2).下面的代码列出了这两种复杂度的算法。之所以时间复杂度下降,是因为我不再单独的判断string的某一个substring是否是回文,而是先用一个数组boolean P[][],来保存... 阅读全文
posted @ 2014-04-26 22:52 echoht 阅读(137) 评论(0) 推荐(0) 编辑
摘要:这道题我采用的是递归算法解决的,时间复杂度虽然比较高,但是却可以被AC,期待看到更有效的方法。我觉得求各种组合情况的问题一般采用递归算法。下面是AC代码: 1 /** 2 * Given a string s, partition s such that every substring o... 阅读全文
posted @ 2014-04-26 19:35 echoht 阅读(148) 评论(0) 推荐(0) 编辑
摘要:---恢复内容开始---这道题考察的可能偏向逻辑的思考能力。最有效的方法是时间复杂度为O(n),空间复杂度为O(1).这种高效算法,参考一个前辈的思想:“My linear solution based on a observation that, if you stops at certain g... 阅读全文
posted @ 2014-04-25 21:33 echoht 阅读(117) 评论(0) 推荐(0) 编辑
摘要:感觉这道题很有趣。一开始的想法没有经过深入的思考,总是想当然,自然也就容易出错。后来深入思考题中提出的两个条件,想到一个局部极小这个概念,接下来的想法,就显得很自然而然。总的来说是先DP,然后根据DP的结果决定给每个小孩多少个candies。DP的关键在于定义一个表示子问题的数组变量,在这个题中定义... 阅读全文
posted @ 2014-04-25 16:59 echoht 阅读(319) 评论(0) 推荐(0) 编辑
摘要:1 /** 2 * Given an array of integers, every element appears twice except for one. Find that single one. 3 * 要求最好是时间复杂度为O(n),空间复杂度为O(1) 4 ... 阅读全文
posted @ 2014-04-25 11:36 echoht 阅读(121) 评论(0) 推荐(0) 编辑
摘要:参考了一个前辈的算法,能够在O(n)的时间复杂度,O(1)的空间复杂度内解决这个问题。 算法过程如下图所示。总共有三个步骤:下面是AC代码: 1 class RandomListNode{ 2 int label; 3 RandomListNode next, random; 4 ... 阅读全文
posted @ 2014-04-25 11:20 echoht 阅读(121) 评论(0) 推荐(0) 编辑
摘要:这一题是在上一题Word Break的基础上求总共有多少种分割方法,一定程度上可以被抽象成组合问题,而往往组合问题采用递归算法可以实现,所以想到递归也就是很自然的事。下面是AC代码。 1 /** 2 * Given a string s and a dictionary of wo... 阅读全文
posted @ 2014-04-25 00:59 echoht 阅读(261) 评论(0) 推荐(0) 编辑
摘要:这道题很有趣,采用动态规划,开始的时候,DP在我的脑海中闪过,但是没有认真去思考,后来看了前辈说采用Dp,才决定自己认真试下。设这样一个标记数组boolean Db[0...len],Db[i]表示String[0...i]是否可segment的。当我考虑第i个字符时,应该这样想,以i为结尾的最后一... 阅读全文
posted @ 2014-04-24 23:27 echoht 阅读(157) 评论(0) 推荐(0) 编辑
摘要:链表有环无环的判断以及环的第一个节点的检测问题。编程之美上面也有。思路极为简单:1. 是否有环,通过快、慢两个指针从头一直走,快的每次走两步,慢的每次走一步,如果快的最后有遇到null,说明没有环;如果快的最后和慢的同时走到某个节点,则说明有环。2. 环的第一个节点,用两个指针,一个从链表的头部开始... 阅读全文
posted @ 2014-04-24 18:43 echoht 阅读(188) 评论(0) 推荐(0) 编辑
摘要:这道题参考了Discuss 中一个前辈的思路:把输入的链表分成前后两半,将后半链表reverse,最后merge成目标链表。 1 /** 2 * reorder the list in-place without altering the nodes' value 3 * 参考了... 阅读全文
posted @ 2014-04-24 18:36 echoht 阅读(166) 评论(0) 推荐(0) 编辑
摘要:二叉树的三种遍历,我之前写过这个的迭代实现,详见 这里。下面是Leetcode这道题的AC代码,同样采用迭代方法,但是我用了一个ArrayList去记录已经出栈的节点,这样当我考察栈顶节点是否直接弹出时,只要看它是否有左右子节点或者是它的左右子节点是否已经被弹出。这种方法可能在时间复杂度上更高。 1... 阅读全文
posted @ 2014-04-24 18:32 echoht 阅读(150) 评论(0) 推荐(0) 编辑
摘要:这题AC的前提是get()和set()操作都得是O(1),不过题中没有说明这点(所以我一开始Naive的用了两个数组分别表示Key 和Value,想都不用想每个操作定然会达到N)。后来是看了discuss后,决定采用HashMap+LinkedList,但是结果还是一直TLE,其实TLE是预料中的,... 阅读全文
posted @ 2014-04-22 23:25 echoht 阅读(287) 评论(0) 推荐(0) 编辑
摘要:这道题较简单,这里不多说,下面是AC的代码: 1 /** 2 * 插入排序的算法比较简单,我看wiki上,当要在已排序列表中插入一个元素时,是从后到前遍历, 3 * 由于链表只能从前往后遍历,所以我采用从后到前。 4 * 要注意的地方就是找到位置时,处理链表的元素插入的... 阅读全文
posted @ 2014-04-22 15:28 echoht 阅读(122) 评论(0) 推荐(0) 编辑
摘要:这道题的难点在于:1. 对链表排序,这样就不能向访问数组一样随机访问里头的元素;2. 题中要求时间复杂度为O(nlogn),且空间复杂度为O(1)我们一般了解的是快排和归并可以达到这样的时间复杂度,但是快排对于链表操作显得比较复杂(其实归并对这个链表操作也很复杂),而通常的归并的空间复杂度又是O(n... 阅读全文
posted @ 2014-04-22 11:07 echoht 阅读(263) 评论(0) 推荐(0) 编辑
摘要:这题是计算逆波兰表达式的最终值,使用stack的进栈出栈操作,可以很容易实现。下面是AC代码: 1 /** 2 * Evaluate the value of an arithmetic expression in Reverse Polish Notation. 3 * 这题就... 阅读全文
posted @ 2014-04-22 10:16 echoht 阅读(121) 评论(0) 推荐(0) 编辑
摘要:LeetCode上目前只提供Java、C++、Python,我都采用Java.这道题是一个简单题(借助Java String提供的trim()和spilt()),需要注意的是题目的具体要求:1. 反转后的字符串首尾的空格需去掉;2. 单词与单词之间若有多个空格,反转后只能保留一个空格。下面是AC代码... 阅读全文
posted @ 2014-04-22 10:13 echoht 阅读(136) 评论(0) 推荐(0) 编辑
摘要:下面两个博客的内容给了我很大的帮助,基本上都是参考他们的内容。http://blog.csdn.net/u013850478/article/details/23037423http://blog.sina.com.cn/s/blog_3cb8b94501017lpr.html首先约瑟夫的基本问题里... 阅读全文
posted @ 2014-04-19 11:54 echoht 阅读(814) 评论(1) 推荐(0) 编辑
摘要:3.2相邻数字的基数不等比:skew数简单题,下面代码已AC。 1 #include 2 #include 3 #include 4 int tran2ten(char * data) 5 { 6 int i = 0; 7 int len = strlen(data); 8 ... 阅读全文
posted @ 2014-04-18 11:08 echoht 阅读(169) 评论(0) 推荐(0) 编辑
摘要:3.1相邻数字的基数等比:确定进制这道题很简单,下面代码已AC。 1 #include 2 #include 3 /** 4 * 把b进制的p转成10进制 5 */ 6 int tran2ten(int p, int b) 7 { 8 int r = 0; 9 int i = 0;1... 阅读全文
posted @ 2014-04-18 10:15 echoht 阅读(157) 评论(0) 推荐(0) 编辑
摘要:2.4装箱这道题比较简单,有点类似枚举所有情况,代码参考了教程做了改进,用数组存储知识,否则要做很多判断。代码已经AC。 1 #include 2 int main(void) 3 { 4 int a,b,c,d,e,f,x,y; 5 int sum; 6 int u[4]=... 阅读全文
posted @ 2014-04-17 00:14 echoht 阅读(137) 评论(0) 推荐(0) 编辑
摘要:2.4 填词其实这是个很简单的问题,但是题目有一定的误导性,因为题中故意说了单词出现的方向只能是竖直的或者水平的。我开始看到这个题目的时候,一直在想是不是得搜索每个字符的具体位置在哪?然后就陷入这个搜索问题中去了。后来突然想想不对啊。输出的答案和这个位置到底有没有确定是不相关的啊,我只要把P个单词中... 阅读全文
posted @ 2014-04-16 00:42 echoht 阅读(188) 评论(0) 推荐(0) 编辑
摘要:2.3 校门外的树解决这道题的关键是如何把多个有重叠的区域整理成互不重叠的若干个区域。我的解决方法的关键是把输入的各个区域按起始位置排序,然后再通过简单的数值比较和更新,就可以得到最后互补重叠的若干个区域。下面代码已经AC。 1 #include 2 #include 3 int comp(cons... 阅读全文
posted @ 2014-04-15 22:49 echoht 阅读(212) 评论(0) 推荐(0) 编辑
摘要:我的思路是采用递归的方法。总体思路是,先确定第K个串的第一个字符是0还是1,然后再递归确定第二个字符是0还是1,直到剩下字符全为0或者全为1.具体来说是这样的:1、先假设N个0和M个1的组合数为total,其中total=(N+M)!/[N!*M!],则N-1个0和M个1的组合数为[N/(N+M)... 阅读全文
posted @ 2014-04-14 21:49 echoht 阅读(237) 评论(0) 推荐(0) 编辑
摘要:这一题的题目有点问题,我觉得应该把b) format strings have edit distance 5 of each other变成larger than 5. 1 #include 2 #define M 100 3 /* 4 * 采用动态规划算法, 5 * 详见http://en.wikipedia.org/wiki/Edit_distance 6 */ 7 int wfEditDistance(char * a, char * b) 8 { 9 int i=0,j=0;10 int dist[257][257];11 12 for(i=0;i<... 阅读全文
posted @ 2014-04-13 12:22 echoht 阅读(440) 评论(0) 推荐(0) 编辑
摘要:我的思路是给输入的string中每个字符出现次数进行计数,然后按ASCLL码顺序,循环遍历打印出来,每次打印时,记得把字符出现的次数-1。 阅读全文
posted @ 2014-04-12 22:24 echoht 阅读(308) 评论(0) 推荐(0) 编辑
摘要:这道题有几个关键的地方: 1、计算一个数组的逆序对的个数。   我采用遍历的方式,用两重循环,时间复杂度O(N^2),应该没有效率更高的方法【代码27-32】; 2、找到一对(d[j],d[k],设jk),通过交换他们,可以使得逆序对数减少最多。   首先看下交换任意一对(d[j],d[k],设jk),会对这个数组的逆序对的个数造成什么样的影响。认真思考下,可以知道交换(d[j],d[k])只影响在j到k之间的元素的逆序情况,而对这个范围之外的逆序对的个数是不造成影响的,因为[0到j-1]的任意元素相对[j到k]的任意元素的先后顺序,以及[k到len-1]的任意元素相对[j到k]的任意元素的先后顺序都没有变化。那么就只需要考虑交换后[i到j]之间逆序对变化的个数。交换(d[j],d[k])后,减少的逆序对是由下标在[j,k)之间且其元素大于d[k],以及下标在(j,k]之间且其元素小于d[j],而增加的逆序对是由下标在[j,k)之间且其元素小于d[k],以及下标在(j,k]之间且其元素大于d[j]【代码41-51】。另外一个值得注意的是只有当d[k]d[j]时,交换才能减 阅读全文
posted @ 2014-04-12 21:50 echoht 阅读(423) 评论(0) 推荐(0) 编辑
摘要:鸡兔同笼问题 简单计算题 阅读全文
posted @ 2014-04-11 15:41 echoht 阅读(317) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示