- 博客(39)
- 收藏
- 关注
原创 第一章 设计模式相关内容
"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。
2024-11-10 23:44:26
872
原创 LeetCode Day42|●1049. 最后一块石头的重量 II(给定容量的背包,尽量装,最多能装的重量是多少)●494. 目标和(有多少种方法)●474.一和零(多重背包,最多有多少个物品 )
把石头尽可能分成两堆,如果两堆的重量如果相似的话,那么相撞后所剩的值就是最小值类似:分割等和子集1背包问题:每个物品只能用一次和 416. 分割等和子集 很像本题:装满背包有多少种方法分割等和子集: 能不能装满背包最后一块石头:尽量装这个背包纯01背包问题:装满这个背包它的最大价值是多少初始化:不要纠结字面意思,可以带入一个场景去看一下 eg.[0] target=0 dp[0]=1重点理解 递推公式:dp[j] += dp[j - nums[i]],这个公式后面的提问。
2024-08-09 10:43:04
598
2
原创 Jvm基础篇| ●导学●00 目录●01 初识 JVM●02 字节码文件详解●03 运行时数据区●04 自动垃圾回收
singleDoc#]《基础篇》
2024-07-26 23:54:28
211
原创 LeetCode Day42|●01背包问题 二维(46.携带研究材料)● 01背包问题 一维(46.携带研究材料)●416. 分割等和子集(初始化和遍历顺序式难点)
01背包、完全背包、多重背包、混合背包、分组背包01背包:有n种物品每种物品只有一个完全背包:有n种物品每种物品有无限个多重背包:有n种物品每种物品的个数不相同背包问题:每个物品有自己的重量也有自己的价值,一个重量最多放m的背包,问这个背包最多能装价值为多少的物品ij和dp[i][j]的含意:是0到物品i之间的物品任意取放进容量为j的最大价值为dp[i][j]滚动数组解题抽象成01背包问题如何初始化确定遍历顺序。
2024-07-25 23:55:01
844
2
原创 LeetCode Day13|● 150. 逆波兰表达式求值(后缀表达式适合计算机运算)● 239. 滑动窗口最大值(自己实现单调队列)● 347.前 K 个高频元素(key:元素value:次数)
后缀表达式是一种很适合计算机来做运算的一种表达式,因为后续表达式不需要加括号关键是理解逆波兰表达式用小顶堆,每次pop最小的元素,留下的都是最大的如何统计频率如何用堆来解决前K个高频的问题。
2024-07-25 10:25:11
508
2
原创 LeetCode Day10|● 理论基础● 232.用栈实现队列(两个栈实现)● 225. 用队列实现栈(一个队列实现)● 20. 有效的括号(栈,存反)● 1047. 删除字符串中的所有相邻重复项
复用思想函数复用很重要节约资源方法尽量复用第一种情况是在遍历完之后处理的开心消消乐。
2024-07-17 22:27:15
423
原创 LeetCode Day8|● 344.反转字符串(原地) ● 541. 反转字符串II(i可以大步跨越) ● 卡码网:54.替换数字(ACM模式多熟悉熟悉)
一般每门编程语言的都有库函数实现for循环里面的i可以成段成段(2k 段)的跳越,不一定要i++一步一步地跳跃acm模式得多熟悉熟悉。
2024-07-14 08:23:49
570
原创 LeetCode Day6|● 454.四数相加II(二二分|用map) ● 383. 赎金信(映射) ● 384. 三数之和(双指针) ● 385. 四数之和(384三数之和再套一层循环) ● 总结
查找元素是否存在用哈希法双指针思路简单但是去重是关键三数之后的思路上再套一层for循环哈希表是用来快速判断一个元素是否出现在集合中虽然map是万能的,但是也要考虑什么时候用数组,什么时候用set。
2024-07-13 16:19:24
798
原创 LeetCode Day5|● 哈希表理论基础● 242.有效的字母异位词(数组) ● 349. 两个数组的交集(set)● 202. 快乐数(两个函数方便点)● 1. 两数之和(map)
数组也可实现hash,并且比较快注意条件限制数组相对效率更高为什么想要使用哈希法为什么要用mapmap的作用:存放遍历过的元素map中的key:遍历的树,value:存数组的下标。
2024-07-12 00:16:22
221
原创 LeetCode Day36|●56. 合并区间(先存起来)● 738.单调递增的数字(从后往前变量,flag的妙用)● 968.监控二叉树(二叉树+贪心)
重叠类问题:排序—>重叠(1.重叠怎么处理 2.没有重叠怎么处理)遍历顺序:只有从后向前遍历才能重复利用上一次比较的结果优先从叶子节点的父节点开始去安装摄像头,然后每隔两个节点按照一个摄像头。
2024-07-11 15:25:34
442
1
原创 LeetCode Day35|● 452. 用最少数量的箭引爆气球(难点:判断多个气球重叠)● 435. 无重叠区间(同452思想)● 763.划分字母区间(精妙的hash数组用来记录字符的最远位置)
射爆气球后不需要把元素数组移除判断气球重叠与不重叠判断气球重叠后如何判断气球于下一个气球重叠左边界排序+右边界排序贪心思想不明显核心思想是:用最远距离模拟了圈字符的行为。
2024-07-11 10:45:09
364
原创 LeetCode Day34|● 134. 加油站● 135. 分发糖果(两边分别考虑)● 860.柠檬水找零(理清思路)● 406.根据身高重建队列(新队列:避免重复访问)
暴力解法用while熟练使用贪心算法:局部最优推出全局最优一次是从左到右遍历,只比较右边孩子评分比左边大的情况。一次是从右到左遍历,只比较左边孩子评分比右边大的情况。梳理清楚逻辑就能轻松应对题目了重新定义一个新队列的原因:避免遍历的时候因为插入的原因重复访问同一个元素。
2024-07-03 11:44:49
889
原创 LeetCode Day31|● 122.买卖股票的最佳时机II(利润拆分)●55. 跳跃游戏(覆盖的思想)● 45.跳跃游戏II(小步数求最大的覆盖范围)●1005.K次取反后最大化的数组和(2贪)
股票问题是动态规划中的一个系列贪心是本题利润拆分的关键点贪心无套路本题的局部最优:每遍历一个元素的时候都去尽可能的增加它的覆盖范围,即去取它的最大覆盖范围;全局最优就是整个数组序列的最大覆盖范围i为什么小于等于cover,因为i遍历需要在覆盖范围里面移动,超出覆盖范围了移动就没有意义了以最小的步数增加最大的覆盖范围,直到覆盖范围覆盖了终点贪心的思考方式:局部最优推出全局最优。
2024-06-28 15:10:24
389
原创 LeetCode Day29|●理论基础(局部最优推出全局最优)●455.分发饼干(大饼干尽量去喂大胃口、小饼干能满足一个小孩就满足一个小孩)●376. 摆动序列(两种平坡)●53. 最大子序和
局部最优求全局最优局部最优得全局最优有两个极端,所以不要轻视常识性推导+举反例要考虑:1.上下有平坡、2.单调有平坡的情况想清楚贪心贪的是哪里,局部最优是哪里不是遇到负数就跳过而是前面的连续和为负数我们才选择下一个元素作为我们的起点。
2024-06-22 15:14:02
376
1
原创 LeetCode Day28|491.递增子序列 46.全排列 47.全排列 II 322.重新安排行程(可跳过)51.N皇后(适当跳过)37.解数独(适当跳过)总结
没有 hs.removeLast(nums[i]);因为haset主要的作用就是记录当前的层的数值不能起重复hashset每次递归都会被重新初始化定义与顺序有关系遍历的时候从0开始要记得对nums进行排序组合问题和排列问题是在树形结构的叶子节点上收集结果,而子集问题就是取树上所有节点的结果。
2024-06-21 16:37:43
372
原创 LeetCode Day27|93.复原IP地址(与131分割回文串有关系) 78.子集(子集问题是找数的所有节点) 90.子集II(去重)
子集问题和组合问题的区别、子集问题和分割问题的区别:组合问题和分割问题都是收集数的子节点子集问题是找数的所有节点。
2024-06-20 14:05:16
265
原创 LeetCode Day25|● 216.组合总和III(存放结果时相较于模板多了一层判断 + 剪枝) ● 17.电话号码的字母组合(多个集合求组合)● 131.分割回文串(双指针判断是否是回文串)
对比组合的两道题目:216、77多个集合求组合细节处理很多回溯模板复习// 回溯算法模版void backtracking(参数){if(终止条件){// 搜索到叶子结点就找到了一条满足条件的答案存放结果;return;// 遍历过程 for循环横向遍历,backtracking递归纵向遍历for(选择:本层集合中的元素(数中节点孩子的数量就是集合的大小)){处理结点;backtracking(路径,选择列表);//递归回溯,撤销处理的结果。
2024-06-08 21:07:03
251
原创 LeetCode day22 |● 669. 修剪二叉搜索树(通过返回值来删除节点) ● 108.将有序数组转换为二叉搜索树(平衡) ● 538.把二叉搜索树转换为累加树(反中序) ● 总结篇
二叉树移除节点的过程是通过当前层往上一层返回值然后上一层其对应的孩子来接住返回值最终达到删除的效果删除节点的子树中可能还有符合区间的节点,所以还需要继续往下进行递归区间划分整体的一致性(循环不变量的重要性)构造的二叉树不唯一构造二叉树的思路不断中间分割,然后递归处理左区间,右区间,也可以说是分治递归三部曲:返回值、参数、终止条件、单层逻辑二叉树的遍历方式深度优先遍历前序遍历(递归法、迭代法)中序遍历(递归法、迭代法)后续遍历 (递归法、迭代法)广度优先遍历。
2024-06-04 20:49:50
392
原创 LeetCode Day22|235. 二叉搜索树的最近公共祖先(利用二叉搜索树的特性) ● 701.二叉搜索树中的插入操作(递归、迭代) ● 450.删除二叉搜索树中的节点(涉及到改树的结构)
二叉搜索数帮我们确定了搜索方向往下遍历遇到第一个节点,在p和q之间,那么这个节点一定是最近的公共祖先而不是次级的向上返回:向左遍历的时候就返回给当前层的左子树,向右遍历的时候就会返回给当前层的右子树通过递归函数的返回值完成新加入节点和其父节点的赋值操作搜索树的一个特性是有序性递归三部曲:确定递归函数参数以及返回值确定终止条件确定单层递归的逻辑二叉搜索树删除节点比增加节点复杂的多,因为删除节点操作涉及到结构的调整。
2024-06-03 23:26:57
335
2
原创 LeetCode Day21|● 530.二叉搜索树的最小绝对差(双指针) ● 501.二叉搜索树中的众数(众数可能不知一个、双指针) ● 236. 二叉树的最近公共祖先(遍历、后序遍历、回溯)
双指针移动二叉树搜索树求最值、差值,要利用好二叉搜索树是有序的这一特点代码能力不一定是高深的算法,有些时候是一些细节问题普通二叉树的求中的数的情况用直白想法暴力法统计最高出现频率元素的技巧统计频率count和最大频率maxCount配合双指针为什么没有这个技巧一定要遍历两次呢?因为要求的是集合,会有多个众数,如果规定只有一个众数,那么就遍历一次稳稳的了回溯可以将下面的结果一层一层的返回到上一层。
2024-06-02 21:22:52
468
2
原创 LeetCode Day19|● 654.最大二叉树(区间规则统一) ● 617.合并二叉树(同时操作两棵二叉树) ● 700.二叉搜索树中的搜索(返回的是指针) ● 98.验证二叉搜索树(双指针)
区间统一:左闭右开用新二叉树替换掉使用tree1的不部分即可和判断是否是对称二叉树的题目比较类似,本质都是同时操作两棵二叉树二叉搜索树特性:自带顺序判断是否是二叉搜索树要采用中序遍历,中序遍历的前提下,如果是二叉搜索树,遍历的元素就是一个有序数组。双指针:pre 和 root。
2024-05-21 15:57:14
321
原创 LeetCode Day18|● 513.找树左下角的值(左下角理解) ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
为啥没有中的处理逻辑,是因为本题没有处理中的逻辑,所有本题前中后序都可以/*** int val;* }* }*/// 方便根据数组查找位置// 用 map 保存中序序列的数值对应的位置i++){// 参数里面的范围都是左闭右开// 找到前序遍历的第一个元素在中序遍历中的位置// 构造结点// 保存中序遍历的左子树用于确定前序数列的个数。
2024-05-18 17:53:53
459
原创 设计模式 Day1| ●创建型模式(1.单例模式、2.工厂方法模式、3.抽象工厂模式、4.建造者模式(也叫生成器模式)、5.原型模式)
创建型模式
2024-05-13 23:36:49
772
原创 LeetCode day17|● 110.平衡二叉树(定义) ● 257. 二叉树的所有路径(路径存储) ● 404.左叶子之和(左叶子的定义)
求高度用递归使用后序遍历实现画表上进行推演一遍比较合适总耗时:1.5h。
2024-05-11 09:51:29
380
2
原创 LeetCode Day16|● 104.二叉树的最大深度(理解高度和深度 递归 迭代都行) 559.n叉树的最大深度(语法糖少些代码) ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数
深度:任意一个节点到根节点的距离高度:任意一个节点到叶子节点的距离求高度有后序遍历,从下往上计数;求深度用前序遍历,从上往下计数总耗时:3h。
2024-05-10 14:24:07
280
3
原创 LeetCode Day15|● 层序遍历(广度优先搜索,画板上模拟会更加清晰) 10 ● 226.翻转二叉树(递归顺序要注意) ● 101.对称二叉树(是否对称就是比较内外侧是否相对)
总共用时:4h25min。
2024-05-09 15:12:47
246
1
原创 LeetCode Day41|● 343. 整数拆分(dp数组的含义和递推公式是难点) ● 96.不同的二叉搜索树(递推公式的推导是难点)
总耗时:01:36:41。
2024-05-02 15:41:14
269
2
原创 [无标题-用来回顾markdown语法的]
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2024-05-01 15:42:52
969
原创 LeetCode Day38|● 理论基础(五部曲:1.数组含义2.公式3.初始化4.顺序5.打印)● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
要考虑清楚明确dp数组以及下标的含义递推公式dp数组的初始化遍历顺序打印dp数组总耗时:01:29:19。
2024-05-01 00:46:01
1026
1
原创 LeetCode Day24|理论基础、77.组合(回溯三部曲1递归函数的参数和返回值2确定函数的终止条件3单层递归逻辑)
【代码】LeetCode Day24|理论基础、77.组合(回溯三部曲1递归函数的参数和返回值2确定函数的终止条件3单层递归逻辑)
2024-04-23 23:02:51
320
1
原创 LeetCode Day4|24. 两两交换链表中的节点(指针交换)、19.删除链表的倒数第N个节点(双指针)、面试题 02.07. 链表相交(链表尾部对齐)、142.环形链表II(双指针)、总结
双指针。
2024-04-18 00:51:14
331
1
原创 LeetCode Day3|链表基础、203.移除链表元素(虚拟头结点)、707设计链表(索引从0开始)、206.反转链表(双指针)
算法博客记录
2024-03-30 20:03:17
271
1
原创 LeetCode Day2|911.有序数组的平方(平方+快排|双指针+额外数组)、209.长度最小的子字符串(滑动窗口)、59螺旋矩阵||(循环不变量+区间的定义)
刷题的博客记录
2024-03-30 00:15:51
270
1
原创 LeetCode Day1|704.二分查找(顺序和边界)、27.移除元素(暴露和双指针)
day1-1. 704二分查找。day1-2. 27.移除元素。
2024-03-22 01:01:44
218
2
原创 解决IDEA使用卡顿的问题
windows 的idea参考链接:https://blog.csdn.net/bbj12345678/article/details/108304669。分配了750M就已经使用了640M,在性能突发的时候完全顶不住,经常卡也再正常不过了。可以查看内存分配情况及使用情况。
2023-07-16 18:48:03
6700
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人