
算法
文章平均质量分 62
洛城一别
这个作者很懒,什么都没留下…
展开
-
java递归时,如果参数是数组需要拆分时
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。给定的模版是:public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { }}思路很简单,所谓二叉搜索树即对根节点即其左右子树,其左子树的所...原创 2018-04-17 13:45:48 · 521 阅读 · 0 评论 -
顺时针打印矩阵
计算层数,每层四个动作:左上到右上,右上到右下,右下到左下,左下到左上。层数计算:矩阵中宽高最小值记为i,则层数为i/2+i%2。理解这个需要画图,按i为奇数和偶数考虑。为偶数,则每层需要所占空间都是两格,所以偶数直接除二就是层数。为奇数则还会剩一层(画个图就明白了),而这一层也会是一层,所以奇数还要加一。故有上式。先用变量表示出矩阵宽高,界定别出错。还有就是打好补丁, 发现3*n(n>4)...原创 2018-04-11 23:47:48 · 103 阅读 · 0 评论 -
所有节点和为target的所有路径集合
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。模版:public class Solution { public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { ...原创 2018-04-18 11:05:52 · 860 阅读 · 0 评论 -
去重复的字典排序的全排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。模版:java:import java.util.ArrayList;public class Solution { public ArrayList<String> Permutation(Strin...原创 2018-04-22 23:18:38 · 641 阅读 · 0 评论 -
打印数组中数量过半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。java模版:public class Solution { public int MoreThanHalfNum_Solution(int [] array) { ...原创 2018-04-23 15:24:16 · 2124 阅读 · 0 评论 -
最大连续子数组
这题不难写出,问题是够不够简洁。import java.util.ArrayList;public class Solution { public int FindGreatestSumOfSubArray(int[] array) { int res = Integer.MIN_VALUE; int sum = 0; for(int i = 0; i < array.length; ...原创 2018-04-25 10:18:15 · 184 阅读 · 0 评论 -
二查搜索树与中序遍历
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向模版:public class Solution { public TreeNode Convert(TreeNode pRootOfTree) { //... }}分析:二叉搜索树中序遍历的结果就是一个排好的数列。想连成链表只要把当前节点跟之前的...原创 2018-04-21 18:02:04 · 337 阅读 · 0 评论 -
二叉树的按数组创建
首先空的节点在数组中用#号表示。思路:1.把树从根左右的顺序从0开始标号。那么第i号节点的左孩子的标号是2*i+1,右孩子是2*i+2。2.程序上实现标号:即创建一个TreeList类型的List记作nodeList,List<TreeNode> nodeList = new ArrayList<TreeNode>();再把数组中的元素按顺序放进去:for(int i = ...原创 2018-04-10 12:13:44 · 1542 阅读 · 0 评论 -
利用前序遍历和中序遍历还原二叉树以及涉及的分治法思想
思路:前序遍历中根永远是在最前,所以用来找根节点中序遍历根永远在中间,只要知道哪个是根,那么其左边是这个根的左子树,右边是右子树。也就是说我们只需要重复这个过程直到根节点是叶节点就可以了(实际判定是在这下一步即前序数组为空),这种明显就是递归。有点像分治法,每次递归设计的变量都变少(本题中是前序数组),直到最后少到一定条件(本题中是前序数组为null)就能结束递归,本题中是(return null...原创 2018-03-13 12:28:11 · 517 阅读 · 0 评论 -
java两个堆栈实现队列
package exercise1;import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public...原创 2018-03-13 16:59:09 · 247 阅读 · 0 评论 -
java堆排序
堆排序实际上是把数组当成一个完全二叉树来处理。堆排序的目的是构建根永远大于等于其所有子节点的树,当然这个例子里没有树,只是数组按照完全二叉树的结构模拟的树。堆排序的一部分可以用来实现找数组中的最大元素(sort函数内只用第一个for循环),两个for循环都用的话就是排序了,而且这个排序能实现只要最小或最大的几个而不是全部都排好。完全二叉树定义:只有最后一行或倒数第二行才有叶结点,并且最后一行的叶结...原创 2018-03-24 15:56:43 · 231 阅读 · 0 评论 -
判断树是否为二叉树的子树
给定的结构是HasSubtree(root1,root2)即判断root1做根的树中是否含有root2节点做根的树。二叉树的问题基本可以确定是用递归了,肯定是先递归遍历前者找到与右边树的根相等的节点,然后再判断对应子树。即遍历前树,找到一个节点和root2相等,那么就把其作为根的子树列为考虑对象,接下来用另一个方法判断是不是。是就直接结束了,不是还要继续向下找下一个考虑对象而这里很显然用递归就可以...原创 2018-04-09 17:24:14 · 736 阅读 · 1 评论 -
第N个丑数
题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。只含235也就是因子含235中的一个或多个。模版:public class Solution { public int GetUglyNumber_Solution(int index) { re...原创 2018-05-06 10:14:09 · 467 阅读 · 0 评论