14 左神算法
Lamiaomiao
好好学习,天天向上
展开
-
左神算法——第16题——二叉树的序列化和反序列化
二叉树的序列化和反序列化队列中 add 和 offer 方法的区别:两者都是往队列尾部插入元素,不同的是,当超出队列界限的时候,add()方法是抛出异常让你处理,而 offer()方法是直接返回falseimport java.util.LinkedList;import java.util.Queue;public class e03Serialize { public s...原创 2019-08-04 14:15:47 · 2313 阅读 · 0 评论 -
左神算法——第09题——在行列都排好序的矩阵中找数
【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。public class e11FindNumInSortedMatrix { public static boolean isContains(int[][] matrix,int K){ int row=0; int col=matrix[0].length-1; while...原创 2019-07-27 16:01:26 · 162 阅读 · 0 评论 -
左神算法——第10题——打印两个有序链表的公共部分
给定两个有序链表的头指针 head1 和 head2 ,打印两个链表的公共部分public class e11PrintCommonPart { public static class Node { public int value; public Node next; public Node(int data) { ...原创 2019-07-27 18:42:03 · 149 阅读 · 0 评论 -
左神算法——第11题——判断一个链表是否为回文结构
给定一个链表的头节点head,请判断该链表是否为回文结构。 例如: 1->2->1,返回true。 1->2->2->1,返回true。15->6->15,返回true。 1->2->3,返回false。通过栈解决import java.util.Stack;public class e12IsPalindromeList { ...原创 2019-07-27 18:45:19 · 162 阅读 · 0 评论 -
左神算法——第12题——将单向链表按某值划分成左边小、中间相等、右边大的形式
【题目】 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于 pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。 例如:链表9->0->4->5->1,pivot=3。 调整后链表可以是1->0-&g...原创 2019-07-27 18:47:35 · 277 阅读 · 0 评论 -
左神算法——第13题——复制含有随机指针节点的链表
给定一个由Node节点类型组成的无环单链表的头节点head,请实现一个函数完成这个链表中所有结构的复制,并返回复制的新链表的头节点。 进阶:不使用额外的数据结构,只用有限几个变量,且在时间复杂度为 O(N) 内完成原问题要实现的函数。import java.util.HashMap;public class e14CopyListWithRandom { public static ...原创 2019-07-27 18:49:07 · 110 阅读 · 0 评论 -
左神算法——第14题——二叉树的前中后遍历
实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式import java.util.Stack;//二叉树的前序、中序、后序遍历(递归和非递归方法)//二叉树的层次遍历(只有非递归的方法)public class e01PreInPosTraversal { public static class Node{ public int value; ...原创 2019-07-27 18:59:34 · 179 阅读 · 0 评论 -
左神算法——第15题——二叉树中找到一个节点的后继节点
该结构比普通二叉树节点结构多了一个指向父节点的parent指针。假设有一棵Node类型的节点组成的二叉树,树中每个节点的parent指针都正确地指向 自己的父节点,头节点的parent指向null。只给一个在二叉树中的某个节点 node,请实现返回node的后继节点的函数。在二叉树的中序遍历的序列中, node的下一个节点叫作node的后继节点。public class e02Successor...原创 2019-07-27 19:01:20 · 161 阅读 · 0 评论 -
左神算法——第20题——求完全二叉树的节点个数
已知一棵完全二叉树,求其节点的个数。要求:时间复杂度低于O(N),N为这棵树的节点个数1 << h 等价于 2的h次方如果根节点右子树的左子树到达最后一层,则根节点的左子树是满二叉树,加上根节点,节点数为2的 h-level 次方如果根节点右子树的左子树没到最后一层,则根节点的右子树是满二叉树,加上根节点,节点数为2的 h-level-1 次方public class e0...原创 2019-08-01 18:04:02 · 445 阅读 · 0 评论 -
左神算法——第08题——“之”字形打印矩阵
“之”字形打印矩阵,额外空间复杂度为O(1)public class e10ZigZagPrintMatrix { public static void printMatrixZigZag(int[][] matrix){ int aR=0; int aC=0; int bR=0; int bC=0; in...原创 2019-07-27 14:24:18 · 140 阅读 · 0 评论 -
左神算法——第07题——反转单向和双向链表
1.反转单向链表class Node{ int value; Node next; public Node(int data){ this.value = data; }}public class e09ReverseList { public static Node reverseList(Node head){ N...原创 2019-07-27 14:22:16 · 262 阅读 · 0 评论 -
左神算法——第06题——旋转正方形矩阵
给定一个整型正方形矩阵matrix,请把该矩阵调整成 顺时针旋转90度的样子。 【要求】 额外空间复杂度为O(1)。public class e09rotate { public static void rotate(int[][] matrix){ int tR=0; int tC=0; int dR=matrix.length-1; ...原创 2019-07-27 14:14:48 · 203 阅读 · 0 评论 -
左神算法——第17题——判断一棵二叉树是否是平衡二叉树
判断一棵二叉树是否是平衡二叉树public class e04IsBalancedTree { public static class Node { public int value; public Node left; public Node right; public Node(int value) { ...原创 2019-07-30 19:15:43 · 130 阅读 · 0 评论 -
左神算法——第18题——判断一棵二叉树是否是二叉搜索树
二叉搜索树(BST,Binary Search Tree):对于一棵树上任何一个节点的子树,左子树 < 节点 < 右子树 。通常不出现重复节点,如果有重复节点,可以把它们的值压缩在一个节点的内部。import java.util.Stack;public class e05IsBST { public static class Node { public...原创 2019-07-31 20:36:52 · 483 阅读 · 0 评论 -
左神算法——第19题——判断一棵二叉树是否是完全二叉树
完全二叉树(CBT,Complete Binary Tree):①某个节点有右孩子没有左孩子,则不是完全二叉树;②满足①的条件下,某个节点没有右孩子,有左孩子,或者没有左右孩子时,后面遇到的所有节点必须是叶节点。import java.util.LinkedList;import java.util.Queue;public class e06IsCBT { public stat...原创 2019-07-31 21:07:19 · 330 阅读 · 0 评论 -
左神算法——第01题——用数组结构实现大小固定的栈和队列
用数组结构实现大小固定的栈public class e01ArrayStack { private Integer[] arr; private Integer index; public e01ArrayStack(int initSize){ if(initSize<0){ throw new IllegalArgumen...原创 2019-07-27 13:19:39 · 178 阅读 · 0 评论 -
左神算法——第02题——包含min函数的栈
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作思路:①创建两个栈——stackData用于存放数据,stackMin用于存放任一时刻 栈中的最小值②根据下图来分析:首先压入4,Min中也压入4;然后压入5,5>4,所以Min中继续压入4;压入3,3<4,Min中压入3;压入6,Min中继续压入3。③弹栈操作时,Min跟着Data栈一起弹出,这样可以保证...原创 2019-07-27 13:29:07 · 77 阅读 · 0 评论 -
左神算法——第03题——用栈实现队列结构,用队列实现栈结构
1. 栈实现队列思路:构建两个栈:Push栈和Pop栈;将Push栈中的数据倒入Pop栈中然后返回给用户,就实现了队列。需要注意两个条件:①Pop栈为空时才能其中倒入数据。②向Pop栈倒入数据时必须要倒完。固定栈1入队,栈2出队。pop() 操作时,①如果两栈都为空,报异常;②如果出队栈有元素就出队;③如果出队栈为空,就把入队栈的元素都弹过来再出队。import java.util.Stac...原创 2019-07-27 14:00:50 · 178 阅读 · 0 评论 -
左神算法——第04题——狗猫队列
实现一种狗猫队列的结构,要求如下: 用户可以调用add方法将cat类或dog类的实例放入队列中; 用户可以调用pollAll方法,将队列中所有的实例按照进队列的先后顺序依次弹出;用户可以调用pollDog方法,将队列中dog类的实例按照进队列的先后顺序依次弹出; 用户可以调用pollCat方法,将队列中cat类的实 例按照进队列的先后顺序依次弹出; 用户可以调用isEmpty方法,检查队列中是否还...原创 2019-07-27 14:10:06 · 93 阅读 · 0 评论 -
左神算法——第05题——转圈打印矩阵
给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如:1 2 3 45 6 7 89 10 11 1213 14 15 16打印结果为:1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11, 10【要求】 额外空间复杂度为O(1)。public class e08zhuanquan_print { public static void spiral...原创 2019-07-27 14:12:11 · 233 阅读 · 0 评论 -
左神算法——第21题——岛问题
一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?public class e08CountIslands { public static int countIslands(int[][] m) { if (m == null || m[0] == null) { ...原创 2019-08-01 19:13:44 · 320 阅读 · 0 评论