自定义博客皮肤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)
  • 收藏
  • 关注

原创 多叉查找树和红黑树

多叉查找树和红黑树上图是一个二叉查找树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.解决的方法可以使用多叉树2-3树,2-3-4树就是多叉树,多叉树通过重新组织节点,减少树的高度,能对二叉树进行优化。二叉树和B树如图B树通过重新组织节点, 降低了

2020-10-09 10:13:34 210

原创 堆和优先队列

优先队列1.1优先队列的底层实现根据优先队列的特点 可以使用二叉堆作为优先队列的底层实现接下来主要回顾对的特点堆2.1 堆的分类堆的一个重要的性质就是 任意节点的值总是>=子节点的值或<=子节点的值2.2 堆的接口设计2.4 二叉堆二叉堆元素的添加和删除向堆中添加元素siftup向堆中删除元素siftdownpublic class MaxHeap<E extends Comparable<E>> { private A

2020-10-09 09:29:03 136

原创 队列的实现

队列1.1队列的接口设计1.2队列的底层实现动态数组链表优先使用双向链表1.3 双端队列1.4 循环队列循环队列的实现public class LoopQueue<E> implements Queue<E> { private E[] data; private int front, tail; private int size; public LoopQueue(int capacity){

2020-10-09 08:56:26 85

原创 贪心算法总结

[55. 跳跃游戏]给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

2020-10-09 08:43:47 333

原创 动态规划 算法总结

[122. 买卖股票的最佳时机 II]给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股

2020-10-09 08:43:20 153 1

原创 深度优先 算法总结

文章目录[98. 验证二叉搜索树]解题思路 dfs[98. 验证二叉搜索树]给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但

2020-10-05 17:20:11 1206

原创 二叉树 专题

94 二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解题方法迭代class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>();

2020-10-05 06:37:49 192

原创 104. 二叉树的最大深度

104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0;

2020-10-04 09:28:37 84 1

原创 103. 二叉树的锯齿形层次遍历

二叉树的锯齿形层次遍历给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]主要思路用一个变量记录是在链表的头部添加还是尾部添加当一层遍历结束后往队列中添加一个 null当一层遍历结束之后 .

2020-10-04 09:24:16 102

原创 剑指 Offer 40. 最小的k个数 快排 堆

剑指 Offer 40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000解题思路 优

2020-10-04 08:40:06 83

原创 148. 排序链表

148. 排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5class Solution { // 解题思路归并排序 public ListNode sortList(ListNode head) {

2020-10-04 08:36:14 774

原创 994. 腐烂的橘子

994. 腐烂的橘子难度中等267收藏分享切换为英文接收动态反馈在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。示例 1:输入:[[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2:输入:[[2,1,1],[0,1,1],[1,0,1]]输出:-

2020-10-04 08:33:46 188

原创 200 岛屿的数量

200 岛屿的数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[[‘1’,‘1’,‘1’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘0’,‘0’],[‘0’,‘0’,‘0’,‘0’,‘0’]]输出: 1示例 2:输入:[[‘1’,‘1’,‘0’,‘0’,‘

2020-10-04 08:31:26 134

原创 leetcode 111 二叉树的最小深度

111. 二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.解题思路 递归class Solution { public int minDepth(TreeNode root) { if(root==null

2020-10-04 08:25:22 72

原创 102. 二叉树的层序遍历

102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]class Solution { public List<List<Integer>> levelOrder(TreeNode

2020-10-04 08:24:12 136

原创 101. 对称二叉树

101. 对称二叉树难度简单1054收藏分享切换为英文接收动态反馈给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?class Solution { pu

2020-10-04 08:18:59 53

原创 leetcode 94 二叉树的中序遍历 递归和迭代

给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?迭代class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); Stack<TreeNode

2020-10-04 08:15:28 81

原创 leetcode 64 最小路径 动态规划

动态规划的解题class Solution { public int minPathSum(int[][] grid) { if(grid==null || grid.length==0|| grid[0].length==0){ return 0; } int rows = grid.length; int columns=grid[0].length; int[][] dp = new in

2020-08-10 16:02:00 122

空空如也

空空如也

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

TA关注的人

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