那些年我们刷过的算法题
anhoulin
这个作者很懒,什么都没留下…
展开
-
输入两颗二叉树A,B,判断B是不是A的子结构
方法一:最简单就是首先判断两棵树的根节点是否相同,如果相同则判断两颗树的左节点是否对应,右结点是否对应,如果两个根节点值不同,主树左节点与子树根节点判断,主树右结点与子树根节点判断,然后再判断对应节点是否相同即可复杂度:O(m*n)方法二:首先两棵树序列化为字符串,然后就是判断字符串之间的包含问题了,用KMP算法判断结果复杂度:O(m+n)上代码:public clas原创 2016-06-25 16:00:19 · 1676 阅读 · 0 评论 -
那些年我们刷过的算法题——输入数组构建MAXtree
自我感觉这道题目还是挺难的,想了很久,还是参考了别人的代码,这个要反复回看几遍吧。思路:使用辅助result数组来完成对数组中每个元素的父节点下标的记录。其中父节点的判断使用辅助栈完成。具体思路请看代码注释.对于一个没有重复元素的整数数组,请用其中元素构造一棵MaxTree,MaxTree定义为一棵二叉树,其中的节点与数原创 2016-06-29 11:47:15 · 999 阅读 · 0 评论 -
刷题之二叉树----判断一棵树是否为完全二叉树
思路:好的,上代码:class CheckCompletion { public boolean chk(TreeNode root) { // write code here if(root == null) return true; Queue q = new LinkedList();原创 2016-07-04 17:31:52 · 380 阅读 · 0 评论 -
那些年我们刷过的算法题---滑动窗口练习题
有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 以数组为[4,3,5,4,3,3,6,7],w=3为例。因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5。第原创 2016-06-29 09:43:00 · 6296 阅读 · 0 评论 -
那些年我们刷过的算法题(排序)---有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序
有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序只有三个数字,只能用交换,原地排序,其实交换次数最少,我为什么马上就想到了类似于快排的数组划分过程,思路:从第一个元素开始遍历,如果是1则位置不变,如果是0与前面第一个元素交换left++,如果是2与最后元素交换right++,遍历过程用i做标记,与元素交换的位置用left和right做标记,知道i大原创 2016-06-23 15:25:42 · 1452 阅读 · 0 评论