算法学习
Code我敲你
敢于竞争,善于转化
展开
-
#算法系列#单调栈
问题引入 废话不多说,首先看一道leetcode原题,柱状图中最大的矩形。 题目描述:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 输入: [2,1,5,6,2,3] 输出: 10 问题分析 直接思路就是枚举每一个矩形,以该矩形为高,然后向左向右延伸,就可以计算面积。那么问题来了:怎么向左向右延伸?—>左右边界如何确定? 其实很简单: 1、左边界:找到大于等于当前柱形高度的最左边元素的下标 2、右边界:找到大原创 2020-06-07 10:53:31 · 207 阅读 · 0 评论 -
No.1 动态规划解题套路
文章目录一、引言二、使用动态规划优化暴力方法三、实战演示下面在介绍动态规划的空间压缩法 一、引言 遇到一到动态规划题后,必须先自己思考找到一个暴力递归求解的方法,然后判断尝试过程是否有后效性。若无后效性,才可以套用动态规划题的模板。这里要说明的是,想出问题的暴力尝试方法这一步是最难的同时也是最重要的,而且没有固定的方法,只能通过不断做题才能又快又好的写出暴力解! 无后效性:是指一个递归状态的返回...原创 2019-12-14 15:42:51 · 246 阅读 · 0 评论 -
二叉查找树
一、啥是二叉查找树 二叉查找树(Binary Search Tree),又被称为二叉搜索树。在二叉树中有一个节点xxx,假设它有左子树lll和右子树rrr,则一定有: value[l]<value[x]且value[r]>value[r]value[l]<value[x]且value[r]>value[r]value[l]<value[...原创 2019-05-25 11:53:52 · 192 阅读 · 0 评论 -
二叉堆原理及实现(C++)
文章目录一、二叉堆简介二、二叉堆的实现2.1 基本定义2.2 堆的插入2.3 堆的删除 一、二叉堆简介 二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:大根堆和小根堆。 大根堆:父节点键值总是大于等于任何一个子节点键值 小根堆:父节点键值总是小于等于任何一个子节点键值 性质: 索引为i的左孩子的索引是 (2*i+1); 索引为i的右孩子的索引是 (2*i+2); 索引为i...原创 2019-05-28 09:55:11 · 1111 阅读 · 2 评论