08 2018 档案

摘要:题目如下: 解题思路:本题可以采用动态规划的方法。记dp[i][j]表示用s1的前i个字符和s2的前j个字符能否组成s3的前(i+j)个字符,如果dp[i-1][j]是True的话,只要s1[i] == s3[i-1+j],那么dp[i][j]就为True;同理,如果dp[i][j-1]是True, 阅读全文
posted @ 2018-08-29 19:39 seyjs 阅读(201) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:除法就是减法。但是遇到比较BT的用例 pow(2,31)/1,需要对方法进行改进。改进的方案是依次增大除数,每次对除数扩大两倍。 代码如下: 阅读全文
posted @ 2018-08-27 13:44 seyjs 阅读(150) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:首先把路径以'/'分割成数组,接下来遍历数组,遇到空或者'.'直接删除,遇到'..'删除本身和前一个元素。 代码如下: 阅读全文
posted @ 2018-08-24 07:40 seyjs 阅读(97) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:题目定义的子序列宽度是最大值和最小值的差,因此可以忽略中间值。首先对数组排序,对于数组中任意一个元素,都可以成为子序列中的最大值和最小值而存在。例如数组[1,2,3,4,5,6],对于元素3来说,由左边[1,2]组成的所有子序列都可以以3为最大值的,而右边[4,5,6]组成的所 阅读全文
posted @ 2018-08-21 08:33 seyjs 阅读(302) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:解题方法没啥好说的,按题目要求来,最后一行左对齐,以及空格数不能被均分的时候,从左往右优先分配。 代码如下: 阅读全文
posted @ 2018-08-20 19:20 seyjs 阅读(233) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:这个问题考的是木桶原理,所以我们的关注点就是找到最短的木板。假设Largest Rectangle 的区间是从heights[i-j],并且heights[k]是其中最短的木板,那么可以得出heights[k] > heightsv[i-1] (i > 0) 以及 height 阅读全文
posted @ 2018-08-20 19:19 seyjs 阅读(339) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:我用的是递归的方法,每次找出与第一个')'匹配的'('计算atom的数量后去除括号,只到分子式中没有括号为止。例如 "K4(ON(SO3)2)2" -> "K4(ONS2O6)2" -> "K4O2N2S4O12"。接下来再对分子式进行分割,得出每个atom的数量后排序即可。原 阅读全文
posted @ 2018-08-20 19:18 seyjs 阅读(305) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:没啥好说的,多叉树的层序遍历。话说leetcode上面二(多)叉树的前序中序后序层序遍历的题很多,有种凑题数的嫌疑。 代码如下: 阅读全文
posted @ 2018-08-20 19:17 seyjs 阅读(361) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:题目要求的是对于任意一个区间i,要找出一个区间j,使得j的起点最接近i的终点。既然这样,我们可以把所有区间的终点组成一个列表,并按大小排序,使用二分查找就可以快速找到j区间。注意要保存新的列表和输入的区间列表的元素映射关系,这样才能快速找到j区间在输入区间列表的索引。 代码如下 阅读全文
posted @ 2018-08-20 19:16 seyjs 阅读(172) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题题干中提到了一个非常重要的前提:"You can swim infinite distance in zero time",同时也给了一个干扰条件,那就是示例2里面的说明,"We need to wait until time 16 so that (0, 0) and ( 阅读全文
posted @ 2018-08-20 19:14 seyjs 阅读(440) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:求最值的题目优先考虑是否可以用动态规划。记dp[i][j]表示在数组A的第j个元素后面加上第i+1 (i从0开始计数)个分隔符后可以得到的最大平均值,那么可以得到递归关系式: dp[i][j] = max(dp[i][j],dp[i-1][k]+float(sum(A[k+1: 阅读全文
posted @ 2018-08-16 20:52 seyjs 阅读(343) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:题目很简单,没啥说的。Follow up 我还没想出来。 代码如下: 阅读全文
posted @ 2018-08-15 08:48 seyjs 阅读(122) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:还是这点经验,对于需要输出整个结果集的题目,对性能要求都不会太高。括号问题的解法也很简单,从头开始遍历输入字符串并对左右括号进行计数,其中出现右括号数量大于左括号数量的情况,表示这个区间是不合法的,需要删掉一个右括号;遍历完成后,如果左括号数量大于右括号的数量,那么需要删除左括 阅读全文
posted @ 2018-08-11 10:17 seyjs 阅读(176) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:用最小堆,优先级队列都可以。我尝试了先把所有node的val都取出来,然后排序,最后组成新的链表,没想到也能被AC。 代码如下: 阅读全文
posted @ 2018-08-08 15:06 seyjs 阅读(95) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:我首先用来时间复杂度是O(n^3)的解法,会判定为超时;后来尝试O(n^2)的解法,可以被AC。对于任意一个点,我们都可以计算出它与其余点的距离,使用一个字典保存每个距离的点的数量,例如dic[2] = 4,表示与该点距离为2的点有四个,那么这四个点任意选两个点就可以和当前点组 阅读全文
posted @ 2018-08-06 15:55 seyjs 阅读(125) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题可以采用贪心算法,因为每条船最多只能坐两人,所以在选定其中一人的情况下,再选择第二个人使得两人的体重最接近limit。考虑到人的总数最大是50000,而每个人的体重最大是30000,因此会有很多人体重一样。这样可以用一个集合set保存体重,再用字典保存每个体重对应的人的数量 阅读全文
posted @ 2018-08-06 09:02 seyjs 阅读(389) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:很经典的动态规划题目,但是用python会超时,只好用C++了。 代码如下: 阅读全文
posted @ 2018-08-04 16:52 seyjs 阅读(199) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:这种题目和四则运算,去括号的题目很类似。解法也差不多。 代码如下: 阅读全文
posted @ 2018-08-04 10:47 seyjs 阅读(141) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题题目难度是easy,但是题意理解起来的难度是medium。题意大致是n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输 阅读全文
posted @ 2018-08-03 09:56 seyjs 阅读(283) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:本题是【leetcode】131. Palindrome Partitioning的升级版,要求的是求出最小cuts,如果用【leetcode】131. Palindrome Partitioning的方法把所有解的都求出来取最小值肯定会超时。对于求最大/最小值的题目,大多数情 阅读全文
posted @ 2018-08-02 15:23 seyjs 阅读(333) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:一般来说,对于题目要求返回所有可能的结果的集合的情况,对算法时间复杂度的要求都不会太复杂。本题直接穷举遍历即可。 代码如下: 阅读全文
posted @ 2018-08-01 15:52 seyjs 阅读(157) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:首先求出链表的长度length,然后令k = k%length,得出的k即为要rotated长度。从头开始遍历链表到第k个元素,将k的next指向none,原链表的尾节点指向头结点即可。 代码如下: 阅读全文
posted @ 2018-08-01 10:27 seyjs 阅读(125) 评论(0) 推荐(0)
摘要:题目如下: 解题思路:凑数题+3,搞不懂为什么本题的难度是Hard,而【leetcode】590. N-ary Tree Postorder Traversal是Medium。 代码如下: 阅读全文
posted @ 2018-08-01 08:29 seyjs 阅读(121) 评论(0) 推荐(0)