-
[综合] 第一章 栈和队列(最大值减去最小值小于或等于num的子数组数量)
【题目】 给定数组arr和整数num,共返回有多少个子数组满足如下情况: max{arr[i..j]}-min{arr[i..j]}<=num,子数组中的最大值减去最小值小于或等于num。 【基本思路】 首先明确两点: 1、如果子数组arr[i…j]满足条件,那么arr[i…j]中的子数组一定...
29
热度 -
[综合] 第二章 链表问题(打印两个有序列表的公共部分)
【】【】 【题目】 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分 【解答】 packagebase;publicclassPrintCommonPart_P41{voidprintCommonPart(Node<Integer>head1,Node<Int...
52
热度 -
[综合] 第二章 链表问题(在单链表和双链表中删除倒数第K个节点)
【题目】 分别实现两个函数,一个可以删除单链表中的倒数第K个节点,另一个可以删除双链表中倒数第K个节点 publicNode<Integer>deleteKthNode(Node<Integer>head,intk){/*若节点的长度为n,需要删除的节点就是第n-k+1,需要...
62
热度 -
[综合] 第二章 链表问题(删除链表的中间节点和a/b处的节点)
【题目】 1、删除链表的中间节点 给定链表的头结点head,实现删除链表的中间节点的函数:例如:不删除任何节点;1-->2,删除节点1;1-->2-->3,删除节点21-->2-->3-->4,删除节点2;1-->2-->3-->4-->5...
59
热度 -
[综合] 第二章 链表问题(反转双向链表)
【题目】 实现反转双向链表的函数 DoubleNode<Integer>reverseDoubleNode(DoubleNode<Integer>head){if(head==null||head.next==null){returnhead;}DoubleNode<I...
63
热度 -
[综合] 第二章 链表问题(环形单链表的约瑟夫问题)
【题目】 据说著名犹太历史学家Josephus有过如下故事:在罗马人占领乔塔帕特后,39个犹太人和Josephus及他的朋友躲进一个洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第一个人开始报数,报数到3的人就自杀,再由下一个人重新报1,报数到3的人就...
57
热度 -
[综合] 第二章 链表问题(判断一个链表是否为回文)
【题目】 给定一个链表的头节点head,请判断该链表是否为回文结构。如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。 例如: 1->2->1,返回true 1->2->2->1,返回true 15->6->15,返回true 1->...
62
热度 -
[综合] 第二章 链表问题(将单向链表按某值划分成左边小、中间相等、右边大的形式)
【题目】 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。例如:链表9->...
28
热度 -
[综合] 第二章 链表问题(两个单链表相交的一系列问题)
【题目】 ?单链表可能有环,可能无环头节点head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null即可。?如果链表1的长度为N,链表2的长度为M,时间复杂度请达到O(N+M),额外的空间复杂度请达到O(1)。 【解答...
77
热度 -
[综合] 第二章 链表问题(向有序的环形单链表中插入新节点)
【题目】 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点。给定一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。 【解答】 packagezcy;publicclassP87_insertNewNod...
16
热度 -
[综合] 第二章 链表问题(按照左右半区的方式重新组合单链表)
【题目】 给定一个单链表的头部节点head,链表长度为N。如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区;如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区;左半区从左到右依次记为L1->L2->...,右半区从左到右依次记为R1->R2...
104
热度 -
[综合] 第三章 二叉树问题(二叉树的序列化和反序列化)
【题目】 二叉树被记录成文件的过程叫做二叉树的序列化,通过文件内容重建二叉树的过程叫做二叉树的反序列化,给定一颗二叉树的头节点head,已知二叉树节点值的类型为32位整型。请设计一种二叉树序列化和反序列化方案,并用代码实现。 【解答】 packagezcy;importjava.util.Linke...
13
热度 -
[综合] 第三章 二叉树问题(分别用递归和非递归的方式实现二叉树的先序、中序、后序遍历)
【题目】 用递归和非递归的方式,分别按照二叉树的先序、中序和后序打印所有的节点,我们约定:先序遍历顺序为根、左、右,中序遍历的顺序为左、根、右,后序遍历顺序为左、右、根。 【解答】 packagezcy;importjava.sql.Statement; importjava.util.Stack;...
111
热度 -
[综合] 第三章 二叉树问题(在二叉树中找到累加和为指定值的最长路路径长度)
【题目】 给定一棵二叉树的头节点head和一个32位整数sum,二叉树节点值类型为整型,求累加和为sum的最长路径长度。路径是指从某个节点往下,每次最多选择一个孩子节点或者不选所组成的节点链。 packagebase;importjava.util.HashMap; importjava.util....
70
热度 -
[综合] 第三章 二叉树问题(找到二叉树中的最大搜索二叉子树)
【题目】 给定一颗二叉树的头结点head,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉树,并返回这棵子树的头结点 packagezyc.binaryTree;/***找到二叉树中的最大搜索二叉树*/ publicclassP121_maxBst{publicstaticvoidmain(...
68
热度 -
[综合] 第三章 二叉树问题(二叉树的按层打印)
【题目】 给定一颗二叉树的头结点head,实现按层打印二叉树 【代码】 packagezyc.binaryTree;importjava.util.LinkedList; importjava.util.Queue;publicclassP132_printBT{publicstaticvoidma...
11
热度 -
[综合] 第三章 二叉树问题(找到搜索二叉树中的两个错误节点)
【题目】 一颗二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这个二叉树不再是搜索二叉树,请找到这两个错误节点并返回。 packagezyc.binaryTree;importjava.util.Stack;publicclassP137_getTwoErrorNode{publicsta...
77
热度 -
[综合] 第三章 二叉树问题(判断t1树是否包含t2树的全部拓扑结构)
【题目】 给定彼此独立的两颗树头结点分别是t1和t2,判断t1树是否包含t2树全部的拓扑结构 packagezyc.binaryTree;publicclassP143_ContainsTopology{publicstaticvoidmain(String[]args){Nodenode=newN...
85
热度 -
[综合] 第三章 二叉树问题(判断一个数是否为完全二叉树)
【题目】 判断一棵树是否为完全二叉树。 【分析】 1、按层遍历二叉树,从每层的左边向右边依次遍历所有的节点 2、如果当前结点有右节点,但没有左节点,直接返回false 3、如果当前节点并不是左右两个节点全有,那么之后的节点都必须为叶节点,否则返回false 【代码】 packagezyc.binar...
14
热度 -
[综合] 第三章 二叉树问题(通过有序数组生成平衡搜索二叉树)
【题目】 给定一个有序数字sortArr,已知其中没有重复值,用这个有序数组生成一棵平衡二叉树,并且该平衡二叉树中序遍历的结果与sortArr一致 【分析】 用有序数组最中间的树生成二叉树的头节点,然后用这个树左边的树生成左子树,用右边的树生成右子树即可 【代码】 packagezyc.binary...
77
热度