- 博客(30)
- 收藏
- 关注
原创 动态规划相关
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心算法,贪心没有状态推导,而是从局部直接选最优的,例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。............
2022-08-15 22:32:39
454
原创 二叉树相关
刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。int val;};大家会发现二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。int val;}}}二叉树的递归遍历递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证写出正确的递归算法!........................
2022-08-10 22:16:46
2203
原创 PriorityQueue(优先队列)
我们都知道队列是一种先进先出的数据结构,没有优先级,众数据平等.但是在某些情况下,我们操作的数据可能带有优先级,出队列时要优先级高的先出,低的后出.在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象.这种数据结构就是我们今天要介绍的优先级队列.在Java的集成框架中主要有两种类型的优先级队列,分别为:PriorityQueue和PriorityBlockingQueuePriorityQueue是线程不安全的,PriorityBlockingQueue是
2022-08-06 22:13:46
7946
4
原创 栈和队列(Java)
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。压栈:向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;出栈:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。........
2022-08-04 21:32:32
2660
原创 双指针方法
如果左指针left 指向的元素等于val,此时将右指针right 指向的元素复制到左指针left 的位置,然后右指针 right 左移一位。如果赋值过来的元素恰好也等于val,可以继续把右指针right 指向的元素的值赋值过来(左指针left 指向的等于val 的元素的位置继续被覆盖),直到左指针指向的元素的值不等于val 为止。根据快慢法则,走的快的一定会追上走得慢的。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。.......
2022-08-03 22:09:28
1973
原创 字符串相关题目
对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。那么反转字符串依然是使用双指针的方法,只不过对于字符串的反转,其实要比链表简单一些。最后就可以得到左旋n的目的,而不用定义新的字符串,完全在本串上操作。...
2022-08-03 16:22:37
247
原创 KMP算法详解
说到KMP,先说一下KMP这个名字是怎么来的,为什么叫做KMP呢。因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP写过KMP,一定都写过next数组,那么这个next数组究竟是个啥呢?next数组就是一个前缀表(prefix table)。前缀表有什么作用呢?前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。............
2022-08-02 21:32:25
446
原创 Java集合体系
集合与数组的区别(1)长度区别集合长度可变,数组长度不可变(2)内容区别集合可存储不同类型元素,数组存储只可单一类型元素(3)元素区别集合只能存储引用类型元素,数组可存储引用类型,也可存储基本类型Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。在这里主要讲一些我们平常很常用的一些接口和一些实现类。Java集合可分为Collection和Map两种体系Collection接口单列数据,定义了存取一组对象的方法的集合Map接口。.........
2022-07-29 11:18:36
4931
原创 滑动窗口方法
3、此时,我们停止增加right,转而不断增加left指针缩小窗口[left,right),直到窗口中的字符串不再符合要求(不包含T中的所有字符了)。左右指针轮流前进,窗口大小增增减减,窗口不断向右滑动,这就是「滑动窗口」这个名字的来历。如果不存在符合条件的子数组,返回0。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环完成了一个不断搜索区间的过程。窗口的结束位置如何移动窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。......
2022-07-28 11:02:04
2058
原创 哈希表解题方法
总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!httpshttpshttpshttpshttpshttps。.....................
2022-07-28 09:28:00
809
原创 【LeetCode】链表相加 进位
开辟新的链表空间 ListNode pre = new ListNode(0) pre为头节点指针 最后返回的是return pre.next pre.next指向结果链表的首元节点 不使用头结点,直接返回结果链表方法
2022-07-14 11:29:15
450
原创 【数据结构】排序(直接插入、折半插入、希尔、冒泡、快速、直接选择、堆、归并、基数排序)
排序:将一组杂乱无章的数据按一定规律顺次排列起来。即,将无序序列的数据节点包含多个数据域,那么排序往往是针对其中某个域而言。 1.按数据存储介质可分为:内部排序:数据量不大、数据在内存,无需内外存交换数据外部排序:数据量较大、数据在外存(文件排序)。外部排序时,要将数据分批调入内存来排序,中间结果还要及时放入外存,显然外部排序要复杂的多。2.按比较器个数可分为:串行排序:单处理机(同一时刻比较一对元素)并行排序:多处理机(同一时刻比较多对元素)3.按主要操作可分为:比较排序:用比较的方法。 插入排序、交换
2022-07-13 21:54:55
5793
原创 【LeetCode】二叉树的遍历(Java)--递归、迭代、Morris
方法1:递归方法思路与算法首先我们需要了解什么是二叉树的前序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。定义 preorder(root) 表示当前遍历到 root 节点的答案。按照定义,我们只要首先将 root 节点的值加入答案,然后递归调用 preorder(root.left) 来遍历 root 节点的左子树,最后递归调用 preorder(
2022-07-08 20:30:00
1276
原创 【LeetCode】合并
方法一:暴力解法当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前节点的值小于等于 l2 ,我们就把 l1 当前的节点接在 prev 节点的后
2022-07-08 10:29:14
354
原创 【LeetCode】求和
使用「竖式」计算十进制的加法的方式:1.两个「加数」的右端对齐;2.从最右侧开始,依次计算对应的两位数字的和。如果和大于等于 10,则把和的个位数字计入结果,并向前面进位。3.依次向左计算对应位置两位数字的和,如果有进位需要加上进位。如果和大于等于 10,仍然把和的个位数字计入结果,并向前面进位。4.当两个「加数」的每个位置都计算完成,如果最后仍有进位,需要把进位数字保留到计算结果中。在代码中需要注意的有:1.本题给出的二进制数字是字符串形式,不可以转化成 int 型,因为可能溢出;2.两个「加数
2022-07-06 10:11:46
820
转载 【Java】QueryWrapper方法解释
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取.queryWrapper.lt()——小于queryWrapper.le()——小于等于queryWrapper.gt()——大于queryWrapper.ge()——大于等于queryWrapper.eq()——等于queryWrapper.ne()——不等于queryWra
2022-06-20 21:43:07
50220
原创 【Java项目实战】瑞吉外卖-07 移动端开发(包含其他未实现功能)
目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,只需要注册成为会员并且按照提供的开发文档进行调用就可以发送短信。阿里云短信服务介绍短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。使用阿里云短信服务发送短信,可以参照官方提供的文档即可
2022-06-20 21:39:43
2640
2
原创 【Java项目实战】瑞吉外卖-06 套餐管理业务开发(包含修改套餐和单个/批量停售和启售方法)
套餐就是菜品的集合。后台系统中可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并且需要上传套餐对应的图片,在移动端会按照套餐分类来展示对应的套餐。新增套餐,其实就是将新增页面录入的套餐信息插入到setmeal表,还需要向setmeal_dish表中插入套餐和菜品关联数据,所以在新增套餐时,涉及到两个表:setmeal(套餐表) setmeal_dish(套餐菜品关系表)所需要的类和接口:实体类SetmealDish、SetmealDto;Mapp
2022-06-15 15:50:04
4490
2
转载 【Java】@RequestParam和@PathVariable的区别和使用
https://blog.youkuaiyun.com/Trista_1999/article/details/118929719?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165510823216782391818694%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165510823216782391818694&biz_id
2022-06-13 16:30:59
1239
原创 【Java项目实战】瑞吉外卖-05 菜品管理业务开发(包含删除菜品和单个/批量停售和启售方法)
文件上传(upload),是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用广泛。文件上传时,对页面的form表单有如下要求:method="post" 采用post方式提交数据enctype="multipart/form-data" 采用multipart格式上传文件type="file"
2022-06-12 21:55:39
2806
原创 【Java项目实战】瑞吉外卖-04 分类管理业务开发
前面我们已经完成了后台系统的员工管理功能开发,在新增员工时需要设置创建时间、创建人、修改时间、修改人等字段,在编辑员工时需要设置修改时间和修改人等字段。这些字段属于公共字段,也就是很多表中都有这些字段使用MybatisPlus提供的公共字段自动填充功能来统一处理,简化开发。MybatisPlus公共字段自动填充,也就是在插入或者更新的时候为指定字段赋予指定的值,使用它的好处就是可以统一对这些字段进行处理,避免重复代码。实现步骤:1.在实体类的属性上加入@TableField注解,指定自动填充的策略;2.按照
2022-06-10 10:48:57
388
原创 【Java项目实战】瑞吉外卖-03 员工管理业务开发
后台系统中管理员工信息,通过新增员工来添加后台系统用户。点击[添加员工]按钮跳转到新增页面,如下:新增员工,其实就是将新增页面录入的员工数据插入到employee表中。需要注意,employee表中对username字段加入了唯一约束,因为username是员工的登录账户,必须是唯一的。employee表中的status字段已经设置了默认值1,表示状态正常。在开发代码之前,需要梳理以下整个程序的执行过程:1.页面发送ajax请求,将新增员工页面中的输入的数据以json的形式提交到服务端;2.服务端Contr
2022-06-07 21:18:54
399
原创 【Java项目实战】瑞吉外卖-02 登录退出功能开发
登录界面 http://localhost:8080/backend/page/login/login.html在这个路径下,当我们点击登陆时,会发现有这样一个请求请求 URL: http://localhost:8080/employee/login此时报错404,是因为我们后台还没有响应这个请求的处理器,所以我们需要创建相关类来处理登录请求。controller接收用户名和密码,调用service,service再调用mapper,mapper来查找员工employee数据 从前端代码中,可以得知请求为
2022-06-05 17:25:31
1309
原创 【Spring】Bean的八种加载方式
一、XML方式声明bean配置文件1.在xml中声明自定义的bean<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springfra
2022-05-24 17:25:53
2255
原创 【SpringBoot】整合消息中间件
一、消息消息发送方:生产者消息接收方:消费者类型: 同步消息异步消息企业级应用中广泛使用的三种异步消息传递技术:JMS(Java Message Service)AMQP(advanced message queuing protocol)MQTT(Message Queueing Telemetry Transport)JMSJMS:一个规范,等同于JDBC规范 提供了与消息服务相关的API接口JMS消息模型...
2022-05-22 21:27:53
1063
原创 【SpringBoot】 jetCache缓存解决循环依赖错误问题
jetCache依赖版本2.6.2解决方法:在配置中设置spring:allow-circular-references: true
2022-05-19 11:18:57
647
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人