随笔分类 - 算法
打怪升级ing
摘要:判定是否是搜索树 题目: 给定一颗二叉树,判定该二叉树是否是一颗搜索树。 注: 所谓的搜索树就是一棵二叉树的任意子树的左节点的值都要小于根节点的值以及右节点的值都要大于根节点的值。 解题思路: 我们首先定义一个信息类Info这个信息类包括的信息有是否是一颗搜索树以及左子树的最大值以及右子树的最小值,
阅读全文
摘要:力扣113 路径的总和 返回所有满足条件的路径 题目: 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root = [5,4,8,11,null,13,4,7,2
阅读全文
摘要:力扣112 路径的总和II 题目: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点的节
阅读全文
摘要:力扣110 判断是否是平衡二叉树 题目: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:true 示例 2:
阅读全文
摘要:力扣107 二叉树的层序遍历 题目: 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],[3]] 示例
阅读全文
摘要:力扣105 根据先序遍历以及中序遍历构建二叉树 题目: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder = [3,9,20,15,7],
阅读全文
摘要:力扣104 求二叉树的最大深度 题目: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3
阅读全文
摘要:力扣101 对称树 题目: 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3] 输出:false 提示: 树中节点数目在范围 [1, 10
阅读全文
摘要:力扣100 相同的树 题目: 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p = [1,2,3], q = [1,2,3] 输出:true 示例 2: 输入:p = [1,2], q
阅读全文
摘要:力扣023 合并k个排序列表 题目: 给你一个链表数组,每个链表按升序排序。k``lists 将所有链接列表合并为一个排序的链接列表并返回它。 示例 1: Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6] Explana
阅读全文
摘要:力扣025 K组中的反向节点 题目: 给定链表的 ,一次反转列表的节点,并返回修改后的列表。head``k k`是一个正整数,小于或等于链表的长度。如果节点数不是节点的倍数,那么最终省略的节点应保持原样。`k 您不能更改列表节点中的值,只能更改节点本身。 示例 1: Input: head = [1
阅读全文
摘要:链表的反转 单链表的反转 关于单链表的反转最重要的是要弄清楚边界问题。我们首先记录以下头节点的下一个节点然后让头节点的下一“指针”next指向前指针pre刚开始为null,然后pre指针下移指向当前头节点的位置然后头节点下移指向刚刚记录头节点下一节点的位置最后返回pre。当head!=null的时候
阅读全文
摘要:单链表与队列和栈 使用单链表实现队列 队列是一个先进先出的数据结构,它包括进队、出队、获取队列大小等功能。 代码: /** * 使用单链表实现队列 * 队列是一个先进先出的数据结构,有进队列出队列,计算队列的大小等 */ public class LinkedListImplementsQueue
阅读全文
摘要:双链表实现双端队列 双端队列是一个从两端都可以进行进队出队的队列。 代码: /** * 使用双链表实现双端队列 * 双端队列也就是在队列的两端都可以进行出队列以及入队列 */ public class DoubleLinkedListImplementsDeQueue { //1.首先定义一个双端队
阅读全文
摘要:返回数组中的局部最小 局部最小的定义: 所谓局部最小就是比它右边小同时也要比它左边小,如果是数组的第一个元素那么只需要比它下一个元素小也就是局部最小,如果是最后一个元素那么只需要比它上一个元素小就是局部最小,如果仅仅包含两个元素那么谁小谁就是局部最小。 注意: 这样的数组要整体无序且相邻数组元素不相
阅读全文
摘要:二分查找以及二分查找的变形 常规二分查找:在有序数组中找到num 代码: //1.常规二分查找 首先需要保证这个数组是有序的 //在有序数组中找到num public static boolean find(int[] array,int num){ //定义一个”左指针“ int left = 0
阅读全文
摘要:计算一个数组中L位置到R位置的数组元素之和 解题思路一: 我们很容易想到遍历数组,遍历数组L位置到R位置的元素并相机得到和 代码: public class PreSum { public static class RangeSum1 { private int[] arr; public Rang
阅读全文
摘要:力扣14 寻找字符串数组中最长公共前缀 题目: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog","raceca
阅读全文
摘要:力扣12 数字转为罗马数字 题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写
阅读全文
摘要:力扣13 罗马数字转为整数 题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27
阅读全文