自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 单调栈(续)、由斐波那契数列讲述矩阵快速降幂技巧

在这里先接上一篇文章单调栈,这里还有单调栈的一道题。

2024-06-16 00:56:20 773

原创 单调栈数据结构

今天我们来分享一个非常有趣,很好玩的数据结构,叫做单调栈,先来分享一下单调栈是来解决什么问题的,他是解决这样问题的,比如说在一个数组中[3,4,2,6,1,7,0], 要生成什么样的信息呢,没一个位置,左边离他最近的,比他小的位置在哪,和每一个右边离他最近的,比它小的位置在哪。当然他也能够解决左右两边离你最近的比你大的,你搞定了怎么下,那相反就能搞定怎么比你大的。我们先准备一个栈,这个栈就是我们所谓的单调栈,我一定要干嘛,从栈底到栈顶,由小到大,谁由小到大,代表的数组由小到大。

2024-06-02 23:59:45 763

原创 滑动窗口-最大值最小值更新结构

我们可以使用一个双端队列来实现,假如说窗口都从0开始,R++,这是5从右边入队列,R++,7比5大,那么5从右边弹出,7入队列,R++ ,6比7 小,直接从右边入队列,R++,5比6小,直接入队列,假如说这个时候我想缩小了,L++,双端队列左边的就是当前最大值,双端队列中存储的是数组的下标,如果L移动到7右边,那么L 7就从双端队列的左边出队列,队列要严格维持从左到右依次变小,如果相同,队列中的从右边出队列,新的入队列。一直到不超过面值,然后在求1元,4元,7元10元,不超过面值,一直往后求。

2024-05-20 00:48:38 831

原创 从暴力递归到动态规划(六)

从暴力递归到动态规划已经接近尾声,动态规划所有的内容都在这几篇文章中了,这篇文章主要是做一些总结。在总结之前,我们先回顾一下之前改写的整个套路。

2024-05-11 00:09:01 539 1

原创 从暴力递归到动态规划(五)

今天给大家介绍一个动态规划的技巧叫做斜率优化。

2024-04-14 20:34:18 710 1

原创 从暴力递归到动态规划(四)

这题主要不是想谈动态规划,而是想谈一种技巧,这种技巧叫做动态规划的数组压缩技巧。题目很好理解,也很简单,就是题目本身字面意思,举个栗子,如下图,箭头路线的累加和,因为它的累加和最小。这题应该算动态规划中最简单的一题了,我们想讲它不是因为要讲它动态规划的点,而是要讲一种技巧,这种技巧叫做数组压缩技巧return 0;i < row;j++) {

2024-04-06 01:53:29 824 1

原创 从暴力递归到动态规划(三)

初看这问题,woc,好变态啊,啥思路都没有,其实,我们可以把这题拆开来看,把这题拆成两题,第一题,假设有N个人,我给你返回一个数组,返回一个数组是啥呢,每个人最快喝完的时间。通过递归我们发现,只有两个可变参数,这不就是一个二维表嘛,我们知道index的范围是drinks的长度,但free的范围呢?虽然看着很复杂,但是它的依赖关系很简单,我们看当rest == 0时,我们就看 x,y 等不等于a,b,我们由此知道的该三维的第0层,我们再看递归调用都是依赖底下一层的,同一层是不会互相依赖的。

2024-03-31 23:26:13 750 1

原创 从暴力递归到动态规划(二)

0中方法 不对,当我字符串结束的时候,我能不能转化,能 ,转化成什么 空字符串, 返回 1,还有一种说法,0 到 index - 1 位置已经转化完了,无需过问,当index到达终止位置的时候,找到了一种方法,这种方法叫做之前做的决定,返回 1,比如说 1 1 1,0位置我假设让1变成A,1位置假设让1变成A,2位置假设让1变成A,到了3位置,我返回1为什么,到了三位置,我做了一个决定,把111变成AAA,终止位置我只收集一个点数,之前做的所有决定,共同构成这一种转化方法。没错,就是记忆化搜索。

2024-03-24 16:14:17 816 1

原创 从暴力递归到动态规划(一)

很多人一听到动态规划这四个字就浑身发抖,整天抖成筛子,看到高手写的帖子怎么都看不懂,觉得自己和他们好像来自不同的星球,自己费劲心机把一个动态规划搞懂了,结果下个动态规划依旧搞不出来。那么,动态规划是啥呢?简单总结起来就是在调用的过程中如果发现重复的过程,动态规划在算过一次之后把答案记下来,下回再遇到重复过程,直接调,这个行为就叫做动态规划。举个栗子:return 1;return 1;相信大家一定都会写,那么这个代码有什么问题呢?如果你把所有的 f 摊开的话,它会有大量的重复过程。

2024-03-18 00:17:31 764 1

原创 一些经典的递归过程

看起来很简单,很好理解对吧,但是我们看这六个过程是有些麻烦是吧,我们仔细看,只有一个参数却要六个过程,我们来进行一个抽象,我们假设没有左中右,1-N都在from上,我们的目标是to,1-N,我们要从from 挪到to中去,我们引进一个中间的other,第一大步就是 1 到 n - 1 从 from 到 other 中,第二步 将 n 从 from 移动到 to 第三步在将 1 到 n-1 从other移动到to中去,这样是不是就全都到to中了。这里面用到递归中非常常用的一个技巧,叫做恢复现场。

2024-03-13 22:28:46 284 1

原创 图结构和相关表示

1.1 图是由点的集合和边的集合构成1.2 虽然存在有向图和无向图的概念,但实际上都可以用有向图来表达1.3 边上可能带有权值如下就是一个图结构图 一从图片上来看,该图的边是有方向的,所以该图是一个有向图,其实,所有的图都可以认为是一个有向图。例如下面一张图左图的边没有方向,是一张无向图,其实,每一条边我们完全可以把它当成两条有向的边,如右图所示。所以我们说任何图都是有向图,或者说任何图都可以转为有向图。

2024-03-03 23:35:02 480

原创 并查集的应用及常见改写

分析:这是一个很典型的并查集的问题,0,1,2,3,4自己本来就认识自己,可以当做一个集合,假如说0和1认识,就合并0和1 将所有的合并完之后集合的数量就是该题朋友圈的数量。假设给你一个二维数组图中为1的位置为互相认识,该二维数组根据左对角线对称 ,{2,0}位置是1,说明2和0认识,{0,2},{0,4}位置为1说明0除了和2认识之外,还和4认识,虽然 2 和 4 互相不认识,但他们都和 0 认识,所以 {0,2,4} 是一个朋友圈,该问题是给你一个二维数组,求一共有多少个朋友圈?

2024-02-24 22:05:19 287

原创 并查集及其实现

假设一开始有几个样本,a,b,c,d,e,f 一开始,我们认为他们所在的集合只有自己{a},{b},{c},{d},{e},{f},并查集他是维持着一大堆集合的结构。并查集提供两个操作:1.isSameSet查询两个样本是否在同一个集合 返回Boolean类型 例如 isSameSet(a,e)判断a所在的集合和e所在的集合是不是同一个集合2.union将两个样本所在集合的全体,变成一个集合 例如 union(a,e)判断将a所在的集合和e所在的集合合成一个集合。

2024-02-24 12:48:25 288

原创 贪心算法及常见题目

而这道题还有其他更好的解法吗?答案是肯定的,我先把这个60的黄金分割成30 30 的,我需要付出60 的代价 ,我再把一个30的分割成 10 和 20 的,需要付出 30 的代价 ,同样能分割成 10 20 30 ,我这次需要付出的代价是60 + 30 = 90,那我们就可以想了,我们只要从大到小分割不就可以啦,答案是否定的,举个反例 [10,9,8,7] 黄金总长10 +9 + 8 + 7 = 34 ,从大到小分割代价 34 +24 + 15 + 8 = 81 这是最优答案吗?

2024-02-19 01:37:58 602 1

原创 二叉树一些题目和解题思路

我们可以将该节点的所有子节点,放置在该节点的左树右边界上,右树我们不管,可以为null,这样我们就可以将该多叉树序列化成唯一的二叉树,将该步骤反过来就可以将该二叉树还原成原来的多叉树。2.该节点没有右子树,就找该节点的父节点,如果该节点是该父节点的右树,就继续往上,一直到该树是父节点的左树为止,那么该父节点就是该节点的后继节点。2.在不满足1的前提下,在第一次遇到某个节点的左节点或者右节点不双全的情况下,之后遍历的节点一定都是叶子节点。1. 该节点有右子树,该节点的后续节点就是右子树的最左节点。

2024-02-17 11:35:08 338 1

原创 二叉树的序列化和反序列化

curEnd用来保存当前最后一个节点,nextEnd用来保存下一层的最后一个节点,max表示最大的宽度,count表示当前的节点数,在队列中,我们弹一个数字,count++,当到当前节点是该层最后一个节点时,count和max比较,count 清零,把下一层最后一个节点nextEnd的值给当层的最后一个节点curEnd,开始下一层的遍历。后序序列化是有的,我们可以根据先序的改,代码大差不差,但是中序序列化是没有的,因为即使null不可忽略,我们根据中序排序,也没办法还原出唯一的二叉树。

2024-02-15 22:07:18 233

原创 排序算法常见的坑

1.基于比较的排序,它的适用性比较高,使用的范围比较广,我们只需要提供一个比较器,所有的基于比较的排序,都能够通过它进行排序。而不基于比较的排序,它的使用范围比较窄,通常,不基于比较的排序往往对数据的限制比较高,假如说我们使用基数排序,基数排序在一般情况下,排序的数据都是正数,当然我们可以对经典的进行改造,让其可以支持负数,比如我们找出最低的负数,将其加为0,当排完序后,我们再减回来,虽然可以支持到负数,但我们仍需考虑溢出的问题。答案是肯定的,不基于比较的排序,它的时间复杂度可以优化至O(n)

2024-02-14 17:45:57 892

原创 阿里云OSS跨域报错:Access to XMLHttpRequest at ‘...‘ ... blocked by CORS policy: No ‘Access-Control-Allow

当我们已经配置了跨域规则,但还是报这个错误,这个时候就要检查一下是不是我们的请求错误。在我们请求的这个地方,应该换成我们自己服务器的endpoint。

2023-10-06 10:22:59 1121 2

原创 导入项目时报错 Cannot resolve plugin org.springgramework.boot:spring-boot-maven-plugin:2.3.9.RELEASE

导入项目时报错 Cannot resolve plugin org.springgramework.boot:spring-boot-maven-plugin:2.3.9.RELEASE

2023-03-11 09:41:25 403 1

空空如也

空空如也

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

TA关注的人

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