自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 leetcode--WordLadderII

思路一:先用bfs遍历最短路径并记录每个节点的前序节点,后用dfs从end开始回溯到start生成所有的路径。HashMap hm=new HashMap(); int[]len; List[]list; List>lists=new ArrayList>(); LinkedListpath=new LinkedList(); String star

2015-06-29 23:31:53 233

原创 leetcode--ImplementstrStr

思路:利用kmp算法/** * Created by marsares on 15/6/29. */public class ImplementstrStr { public int strStr(String haystack, String needle) { int[]next=getNext(needle); int i=0;

2015-06-29 23:29:26 258

原创 leetcode--SurroundedRegions

思路:利用bfs先把所有和最外层O连通的O标记,然后遍历所有点,没被标记的O就是被X包围的内层点import java.util.LinkedList;import java.util.Queue;/** * Created by marsares on 15/6/28. */public class SurroundedRegions { boolean[][]marke

2015-06-28 10:50:12 261

原创 leetcode--CourseScheduleII

思路:先判断有没有环,再进行拓扑排序。import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * Created by marsares on 15/6/24. */public class CourseScheduleII { List[]adj; boolean

2015-06-27 21:18:08 363

原创 leetcode--ConvertSortedListtoBinarySearchTree

思路:如果用数组可以直接取到中间值,因此可以用前序遍历的顺序来构建BST。但是链表如果要取中间值需要n/2的时间,因此采用中序遍历的顺序来构建BST。 这样root生成的顺序就和中序遍历的顺序一样,也就是list从前往后的顺序。import java.util.List;/** * Created by marsares on 15/6/23. */public class Conv

2015-06-23 10:14:01 246

原创 leetcode--NumberofIslands

思路:从第一行往下对每个'1'分别对右和下相邻为'1'的元素做union操作,最后每个'1'都和上下左右四个相邻的元素做了union,union and find count数即为island数。union and find:有几种实现,时间复杂度取决于find()以及union()函数,find()返回该节点属于哪个集合,union把两个节点对应的两个集合进行归并。这里采用最优的

2015-06-21 21:13:23 208

原创 leetcode--RecoverBinarySearchTree

思路:BST中序遍历生成从小到大的排序数组,如果交换两个节点,相当于交换了数组中的两个数字。我们只要找出中序遍历中不符合排序顺序的两个数字即可。可以利用指针pre记录前一个节点,当后节点小于前节点时有问题。注意当交换的是相邻的两个数字时只能找到一个节点是大于前节点的。/** * Created by marsares on 15/6/19. */public class RecoverB

2015-06-19 18:23:10 249

原创 leetcode--UniqueBinarySearchTreesII

思路:利用递归的思想,要返回(1,n)之间的所有BST可以遍历1->n,root作为根节点,然后将(1->root-1)返回的所有节点作为左子节点以及(root+1,n)返回的所有节点作为右子节点拼接在root下,所有这些root放入数组返回。import java.util.ArrayList;import java.util.LinkedList;import java.util.Li

2015-06-18 18:49:48 259

原创 leetcode--ValidateBinarySearchTree

思路:在递归参数中加入左区间和右区间,当递归左子节点时更新右区间,当递归右子节点时更新左区间。可以简单地证明一下,如果左子节点要符合BST要求,首先得符合当前节点的区间范围,然后要小于当前节点。因此更新右区间。/** * Created by marsares on 15/6/17. */public class ValidateBinarySearchTree { bool

2015-06-17 20:26:54 290

原创 leetcode--FlattenBinaryTreetoLinkedList

思路:顺序为前序遍历的顺序需要注意的地方是需要对初始的root做修改而不是返回新的root。public void flatten(TreeNode root)这里传入的root只是指向root的指针,如果root=new TreeNode(val),root就不再指向root了。因此修改初始的root的话,需要修改root的值以及root的子节点,而不是将root指向一个新的节点。

2015-06-16 20:03:32 217

原创 leetcode--CountCompleteTreeNodes

complete binary tree:最后一层以上的节点全部排满,最后一层叶子节点都在左边。(可能满也可能不满)如果用前序中序或者后序递归的话,内存过大,时间也不够。因此根据complete binary tree的性质,分别求最左子节点和最右子节点的深度,如果相等就根据公式返回,不等再向下递归。这样可以减少递归的次数。/** * Created by marsares on 15/

2015-06-16 19:50:04 276

原创 leetcode--ConstructBinaryTreefromInorderandPostorderTraversal

思路:后序遍历子节点一定在根节点的左边,通过从右往左的遍历可以从根节点到子节点生成二叉树。中序遍历左子节点在根节点的左边,右子节点在根节点的右边。在生成二叉树的时候可以通过中序遍历判断当前节点在二叉树中的位置。import java.util.HashMap;/** * Created by marsares on 15/6/15. */public class ConstructB

2015-06-15 20:19:55 196

原创 leetcode--ConvertSortedArraytoBinarySearchTree

思路:取中位数作为当前的根节点,中位数左边的数组递归的计算左子节点,中位数右边的数组递归计算右子节点。/** * Created by marsares on 15/6/15. */public class ConvertSortedArraytoBinarySearchTree { public TreeNode sortedArrayToBST(int[] nums) {

2015-06-15 20:17:13 233

原创 leetcode--ConstructBinaryTreefromInorderandPostorderTraversal

思路:后序遍历前面的节点一定是后面的节点的子节点,因此从后往前遍历可以从根节点向下构造出二叉树。中序遍历左子节点一定在根节点的左边,而右子节点一定在根节点的右边。因此可以通过中序遍历来判断当前节点在树中的位置。import java.util.HashMap;/** * Created by marsares on 15/6/15. */public class ConstructB

2015-06-15 20:08:48 294

原创 leetcode--BinaryTreePostorderTraversal

思路:如果按照后序遍历将节点放入list,什么时候当前节点可以放入list?当左右子节点都为空或者左右子节点都已经放入list的时候,左右子节点都已经放入list又可以分情况讨论进行简化1右节点为空,左节点放入list2左节点为空,右节点放入list3左右节点都放入list情况三,因为是后序遍历,当右节点放入list时左节点已经放入了list,所以简化成右节点放入list最后判

2015-06-14 17:16:03 276

原创 leetcode--BinaryTreePreorderTraversal

思路:同InorderTraversal,利用两层while循环,外层代表总的递归,里层while代表不断寻找左子节点的过程,因为是前序遍历,将add操作放在内层while就好了。import java.util.LinkedList;import java.util.List;import java.util.Stack;/** * Created by marsares on 1

2015-06-14 12:29:26 196

原创 leetcode--BinaryTreeMaximumPathSum

思路:在能够遍历所有节点的递归中嵌套对于该节点延伸出的最长路径的计算,然后利用类变量记录下最长路径。由于要计算每个根节点延伸出的最长路径,可以先计算该根节点的左、右节点为起点的最长路径,然后取最长的组合。递归就可以写成计算根节点为起点最长路径的函数,然后递归成左节点为起点,右节点为起点,正好可以遍历所有节点。/** * Created by marsares on 15/6/14. */

2015-06-14 11:20:47 272

原创 leetcode--BinaryTreeLevelOrderTraversal II (二叉树层遍历递归实现)

思路:先层遍历在逆序层遍历递归实现:利用List每次递归根据层号加入List中对应的List,递归的顺序左节点在右节点之前就可以保证每一层左边的节点比右边的节点先加入List。import java.util.LinkedList;import java.util.List;/** * Created by marsares on 15/6/13. */public class

2015-06-13 18:16:07 295

原创 leetcode--BinaryTreeInorderTraversal

二叉树中序遍历非递归实现:利用两层循环以及stack,第一层循环代替总的递归过程,第二个循环代替先序遍历时逐层向下访问左节点。第一层循环用stack为空作为控制条件,第二层循环当前节点没有左节点就结束了。public List inorderTraversal(TreeNode root) { if (root == null) return new ArrayList()

2015-06-13 15:17:05 206

原创 leetcode--树的序列化与反序列化

序列化:利用队列,先将根节点放在队列中,然后从队列中poll节点出来在把左子节点和右子节点放入队列中。循环至队列为空。反序列化:也是使用队列public TreeNode Unserialize(String s){ if(s==null)return null; if(s.length()==0)return null; Queuequeu

2015-06-13 15:10:56 660

原创 leetcode--BalancedBinaryTree

平衡二叉树:左右子树深度差的绝对值不大于一,且左右子树为平衡二叉树。/** * Created by marsares on 15/6/12. */public class BalancedBinaryTree { boolean isBalanced=true; public boolean isBalanced(TreeNode root) { i

2015-06-12 09:36:50 240

原创 Leetcode--MaximumGap

要在线性时间内完成计算,那么先排序再计算MaximumGap就不合适了。计数排序如果遇到{99999,100000}的话就超过线性时间了,因此这里采用桶排序的方法。桶排序:A[0,1,...,n]分在m个桶中B1,B2,...,Bm,每个桶代表一个区间B1时间复杂度为O(n+n/m*log(n/m)*m)=O(n+nlogn-nlogm)当n==m时接近O(n)这里选取m=

2015-06-11 19:40:48 305

原创 Leetcode--SortColors

为了达到n的空间复杂度,可以使用快排中的partition方法。利用三个指针:start, iterator, last以及一个区分值p这里为1。iterator遍历整个数组,如果遇到1的数则和last交换这样可以将数字分成p三部分。/** * Created by marsares on 15/6/11. */public class SortColors { public v

2015-06-11 10:00:47 248

原创 leetcode--SortList

因为需要时间复杂度为O(nlogn)所以考虑使用归并排序。ListNode不同于数组,因此要重写合并的方法和找中点的方法。这边找中点使用两个指针,一个快,一个慢。当慢指针到达链表尾端时,快指针到达链表中间。/** * Created by marsares on 15/6/9. */public class SortList { public ListNode sortList(

2015-06-09 18:22:59 186

原创 Leetcode--RegularExpressionMatching

可以把问题简化成如下的递归形式d[i][j]表示String s[0...i]与Pattern p[0...j]是否匹配case1:p[j+1]!='*', 比较s[i]与p[j]。if(s[i]==p[j])d[i][j]=d[i-1][j-1] else return false。如果p[j]==‘.’,那么作相等处理case2:p[j+1]=='*',依次调用d[i][j-1],

2015-06-08 19:40:13 243

原创 Leetcode--LongestPalindromicString

两种思路:第一种:将问题转化成求s和s逆串的最长连续公共子序列最长连续公共子序列是在求最长公共子序列基础上增加了连续子序列的限定。先看下最长公共子序列:假设A="a0,a1,...,am-1", B="b0,b1,...,bn-1", Z="z0,z1,...,zk-1"是A,B的最长公共子序列。当am-1=bn-1可以分解成一个子问题求”a0,a1,...,am-2"以及"b0,

2015-06-06 15:08:15 234

原创 Leetcode--LongestSubString

查找最长的没重复字母的子串:  思路是通过hashmap以及两个指针,第二个指针不断读入新的字母并把未重复的字母索引存入hashmap。当遇到重复字母,第二个指针移动到hashmap中的索引位置后面,并更新子串长度。/** * Created by marsares on 15/6/2. */public class LongestSubstring { int[]ht=ne

2015-06-04 16:07:53 246

原创 Leetcode--Median of Two Sorted Array

这是我做的第一道hard的题,因为看到时间限制为O(log(m+n)),所以想到了要用divide and conquer。但是如何进行divide却没有很好的思路,想到了两个方案,一个是每次去掉小于第m+n/2的数,最后剩下的就是m+n/2。但是如何确定边界条件没有想好。第二个方案是每次去掉相同数量的小于m+n/2和大于m+n/2的数,转化成更小的两个数组。  最后看了http://blog

2015-06-04 15:26:19 304

原创 intel实习第一个月总结

在intel的spark实验室实习已经一个月了,在和蔼的主管以及学弟的帮助下逐渐熟悉spark相关的编程环境。在编写了一个并不算成功的lsh算法后,是时候做出总结继续前进了。第一周  除了在公司以及自己的电脑上配置spark和编程环境以外,这周开始调研中文分词的工具,要求速度快拥有apache的license并且能够和开源的搜索框架相结合。最后把目标锁定在ik-analyzer以及ansj

2015-06-02 19:43:06 1737

apache-maven-3.2.3-bin.tar.gz

网络编程中maven可以在导入项目时从仓库中直接下载相关包,使用户不用手动下载。apache-maven-3.2.3-bin.tar.gz可支持用户创建maven项目以及更新maven。

2014-09-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除