自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:1、通过递归遍历树A,寻找与树B中根结点的val值相等的结点;2、分别遍历A、B,判断二者结构是否相等,若相等,则结束循环返回true;若不等,则继续遍历树A,寻找与树B中根结点的val值相等的结点.public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(r

2020-06-30 09:02:07 126

原创 二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义。public class Solution { public boolean VerifySquenceO

2020-06-30 08:32:47 197

原创 栈的压入、弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:建立一个辅助栈.import java.util.Stack;public class Solution { public boolean IsPopOrder(int [] p

2020-06-27 09:29:38 159

原创 复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路1:哈希产生O(n)的空间,时间也是)(n),以空间换时间.import java.util.HashMap;public class Solution { public RandomListNode Clone(RandomListNode pH

2020-06-27 09:00:40 147

原创 二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:中序遍历即可。只需要记录一个pre指针即可。出现问题,middle(cur.left,pre); //会使得开始时的pre依旧保持nullpublic class Solution { public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree==null)return null

2020-06-25 10:39:59 164

原创 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。首先定义两个指向链表头的指针p ,q;先令一个指针指向第k节点,然后两个指针同时向后移动,最后q指向的即为倒数第k个节点。若i<k则说明k大于链表结点个数.public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode p=head,q=head; int i=0; for(;p!=n

2020-06-18 10:04:11 113

原创 合并两个排序的链表

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。递归:public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null)return list2; if(list2==null)return list1; if(list1.val<=list2.val){

2020-06-18 09:38:42 115

原创 两个链表的第一个公共结点

题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路:需计算链表长度首先计算两个链表长度差值,让较长者先走完差值部分,再两个链表一起往下走.public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { int len1=0,len2=0; Li

2020-06-16 10:46:33 169

原创 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。栈:public class Solution { public ListNode ReverseList(ListNode head) { if(head==null||head.next==null)return head; ListNode pre=head,now=head.next; while(now!=null){ pre.next=now.next;

2020-06-15 10:06:52 119

原创 约瑟夫法——孩子们的游戏(圆圈中最后剩下的数)

题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得

2020-06-13 10:22:02 1021

原创 把二叉树打印成多行

题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。层次遍历import java.util.ArrayList;import java.util.ArrayDeque;public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> all=new Arr

2020-06-12 11:54:56 107

原创 二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:思路:抓住本质,获得二叉树的镜像,实质是交换每个根结点的左右子树.可用递归:循环体:交换左右子树终止条件:根结点为空/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;

2020-06-12 10:33:48 120

原创 和为S的两个数字

题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。//输出两个数的乘积最小的。这句话的理解?假设:若b>a,且存在,a + b = s;(a - m ) + (b + m) = s则:(a - m )(b + m)=ab - (b-a)m - m*m < ab;说明外层的乘积更小也就是说依然是左右夹逼法!!!只需要2个指针1.left开头,

2020-06-12 10:25:04 118

转载 剪绳子

题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入8输出18题目分析:先举几个例子,可以看出规律来。4 : 225 :

2020-06-12 09:58:41 159

转载 整数中1出现的次数(从1到n整数中1出现的次数)

题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。思路1:设N = abcde ,其中abcde分别为十进制中各位上的数字。如果要计算百位上1出现的次数,它要受到3方面的影响:百位上的数字,百位以下(低位)的数字,百位以上(高位)的数字

2020-06-10 09:12:35 246

原创 Flutter基础组件——Text,Container

走进FlutterFlutter作为目前最流行的跨平台技术框架,正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。首先,让我们了解一下Flutter插件。Flutter是什么?Flutter是Google推出的一套开源跨平台UI框架,是使用Dart语言开发的移动应用开发框架,可以快速地在Android、iOS和Web平台上构建高质量的原生用户界面。同时,Flutter还是Google新研发的Fuchsia操作系统的默认开发套件。Flutter是目前最火热的前端技术之一。简单来说,

2020-06-05 09:46:00 301

原创 二叉树的深度

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路1:广度优先遍历(层次遍历)使用队列存放结点,通过变量记录当前层结点数,下一层结点数,以及当前层已遍历结点数,以此来获知树的深度depth。注意点:虽然用的是队列ArrayDeque,且其包含pop(),push()方法,但它们遵照的依旧是栈思想。因此,要想使用队列的先进先出思想,可使用add()/addLast(),pollFirst()方法./**public

2020-06-03 08:21:32 136

原创 编译原理——逆波兰式分析计算

一、实验目的将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。二、实验说明1、逆波兰式定义将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。2、产生逆波兰式的前提中缀算术表达式3、逆波兰式生成的实验设计思想及算法(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越

2020-06-01 08:53:04 6960 1

空空如也

空空如也

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

TA关注的人

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