随笔分类 -  LeetCode

摘要:题目: 解题思路:1、简单思路:暴力破解法,时间复杂度O(n^3),肯定通不过。 2、动态规划法:(一般含“最XX”等优化词义的题意味着都可以动态规划求解),时间复杂度O(n^2),空间复杂度O(n^2)。 形如"abba", "abbba"这样的字符串,如果用dp[i][j]表示从下标i到j之间的 阅读全文
posted @ 2016-04-06 10:25 bakari 阅读(583) 评论(0) 推荐(1) 编辑
摘要:题目: 解题思路: 我自己想的方法,先排序在查找。两个数组,首先想到是归并排序,然后再查找两个数组合并之后的中间元素即为中位数。我们分析下时间复杂度主要用在了归并排序上,为O((m+n)log(m+n)),显然不符合题目要求。题目要求是O(log(m+n)),但是我将这个方法的代码提交上去,仍然通过 阅读全文
posted @ 2015-12-28 12:24 bakari 阅读(3153) 评论(1) 推荐(0) 编辑
摘要:题目: 解题思路: 这个题让找一个字符串中具有不重复单词的最长子串的长度,如:ababc,子串为abc,长度为3。有这么几个方法: 方法一: 依赖字符串本身的一些特有函数,进行相应操作来完成。我们可以维护一个子串,来保存最长的无重复的子串,并记录当前子串的长度,如果遇到重复的字符,则去掉子串中重复的 阅读全文
posted @ 2015-12-27 10:50 bakari 阅读(366) 评论(0) 推荐(0) 编辑
摘要:题目: 解题思路: 这种包含最大、最小等含优化的字眼时,一般都需要用到动态规划进行求解。本题求面积我们可以转化为求边长,由于是正方形,因此可以根据正方形的四个角的坐标写出动态规划的转移方程式(画一个图,从左上角推到右下角,很容易理解): dp[i][j] = min(dp[i-1][j-1], dp 阅读全文
posted @ 2015-12-24 16:31 bakari 阅读(2761) 评论(0) 推荐(0) 编辑
摘要:题目: 解题思路: 两个链表中的元素相加相比普通的加法操作增加了一个层次,和两个数组中的元素相加意义上差不多,这个题可以引申到大数相加上。需要注意的是:进位的处理。 代码展示: 阅读全文
posted @ 2015-12-24 15:07 bakari 阅读(310) 评论(0) 推荐(0) 编辑
摘要:题目: 解题思路: 1、暴力法:两个for循环遍历,时间复杂度为O(N^2),会超时。 2、排序法:这里有两种思路: 1)排好序后,利用区间法来计算两个数的和(两个指针分别指向首尾,逐步向中间收缩) 2)排好序后,固定一个元素a[i],在余下的数中查找target - a[i],查找可用二分查找法, 阅读全文
posted @ 2015-10-12 12:09 bakari 阅读(528) 评论(0) 推荐(0) 编辑
摘要:要求:Given a binary tree, flatten it to a linked list in-place.将二叉树转化为平坦序列的树。比如: 结题思路: 该题有个提示,转化后的树的序列正好是二叉树前序遍历所得到的序列,所以,该题第一个思路就是利用前序遍历的方式来做。 第二个思路:我们 阅读全文
posted @ 2014-11-29 17:31 bakari 阅读(341) 评论(0) 推荐(0) 编辑
摘要:要求:此题正好和Maximum Depth of Binary Tree一题是相反的,即寻找二叉树的最小的深度值:从根节点到最近的叶子节点的距离。 结题思路:和找最大距离不同之处在于:找最小距离要注意(l<r)? l+1:r+1的区别应用,因为可能存在左右子树为空的情况,此时值就为0,但显然值是不为 阅读全文
posted @ 2014-11-29 17:20 bakari 阅读(2584) 评论(0) 推荐(0) 编辑
摘要:要求:判断一棵树是否是平衡二叉树 代码如下: 阅读全文
posted @ 2014-11-27 16:51 bakari 阅读(219) 评论(0) 推荐(0) 编辑
摘要:要求:根据中序和后序遍历序列构建一棵二叉树 代码如下: 阅读全文
posted @ 2014-11-27 16:50 bakari 阅读(217) 评论(0) 推荐(0) 编辑
摘要:要求:通过二叉树的前序和中序遍历序列构建一颗二叉树 代码如下: 阅读全文
posted @ 2014-11-27 16:49 bakari 阅读(190) 评论(0) 推荐(0) 编辑
摘要:要求:求二叉树的深度(二叉树的深度为最远叶子节点到根节点的距离,即根节点到最远叶子节点的距离) 有两种求解的思路,一种采用DFS的思想,一种采用BFS的思想,如下代码所示: 阅读全文
posted @ 2014-11-27 16:46 bakari 阅读(8071) 评论(0) 推荐(0) 编辑
摘要:本题也属于层次遍历的变形,不同之处在于其遍历的方法是交替进行的,形成一个ZigZag的曲线形式,如下: 代码如下: 阅读全文
posted @ 2014-11-27 16:37 bakari 阅读(374) 评论(0) 推荐(0) 编辑
摘要:本题和上题一样同属于层次遍历,不同的是本题从底层往上遍历,如下: 代码如下: 阅读全文
posted @ 2014-11-27 16:34 bakari 阅读(348) 评论(0) 推荐(0) 编辑
摘要:题目:Binay Tree Level Order Traversal 如下一棵树 转换之后需要输出这样的形式: 如下,见代码: 阅读全文
posted @ 2014-11-27 16:29 bakari 阅读(428) 评论(0) 推荐(0) 编辑
摘要:题目:Binary Tree Inorder Traversal 二叉树的中序遍历,和前序、中序一样的处理方式,代码见下: 阅读全文
posted @ 2014-10-11 20:36 bakari 阅读(199) 评论(0) 推荐(0) 编辑
摘要:题目:Binary Tree Preorder Traversal 二叉树的前序遍历,同样使用栈来解,代码如下: 阅读全文
posted @ 2014-10-11 20:34 bakari 阅读(217) 评论(0) 推荐(0) 编辑
摘要:题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈结构作为中转,代码很简单,见下: 阅读全文
posted @ 2014-10-11 20:32 bakari 阅读(281) 评论(0) 推荐(0) 编辑
摘要:题目:LRU cache LRU是一种应用在操作系统上的缓存替换策略,和我们常见的FIFO算法一样,都是用于操作系统中内存管理中的页面替换,其全称叫做Least Recently Used(近期最少使用算法),算法主要是根据数据的历史访问记录来进行数据的淘汰,其核心思想是“如果数据最近被访问过,那么 阅读全文
posted @ 2014-10-10 16:54 bakari 阅读(3097) 评论(0) 推荐(0) 编辑
摘要:题目:Sort List 看题目有两个要求:1)时间复杂度为O(nlogn);2)空间复杂度为常数,即不能增设额外的空间。满足这样要求的排序算法,我们首先想到快排,合并排序和堆排序。我们来分析下几种排序算法对时间和空间复杂度的要求,堆排序实现上过于繁琐,我们不做考虑。快排的最坏的时间复杂度是O(n^ 阅读全文
posted @ 2014-10-07 17:06 bakari 阅读(3745) 评论(0) 推荐(0) 编辑