- 博客(15)
- 收藏
- 关注
原创 深入理解Java虚拟机 读书笔记(二)Java内存区域与内存溢出异常
深入理解Java虚拟机 读书笔记(二)自动内存管理一、运行时数据区域1. 程序计数器2. Java虚拟机栈3. 本地方法栈局部变量表4. Java堆分配缓冲区(TLAB)5. 方法区运行时常量池6. 直接内存二、对象探秘1. 对象的创建指针碰撞空闲列表线程安全2. 对象的内存布局对象头实例数据对齐填充3. 对象的访问定位直接指针访问句柄访问优缺点对比三、实战OutOfMemoryError1. 内存溢出和内存泄漏2. Java堆3. 虚拟机栈和本地方法栈4. 方法区和运行时常量池5. 本机直接内存溢出一、
2021-11-13 23:27:18
871
1
原创 双指针问题(二) 滑动窗口
双指针问题(二) 滑动窗口概念209. 长度最小的子数组713. 乘积小于K的子数组3. 无重复字符的最长子串438. 找到字符串中所有字母异位词概念滑动窗口是在数组上通过双指针同向移动而解决问题的方法。这样的问题我们不必为它们专门命名一个名字,它们的解法其实是很自然的。滑动窗口通常是暴力解法的优化,掌握这一类问题最好的办法就是练习,然后思考清楚为什么可以使用滑动窗口。209. 长度最小的子数组209. 长度最小的子数组该题是最基本的滑动窗口问题,我们可以用两个指针lll和rrr表示窗口的左右段
2021-10-19 21:41:33
157
原创 二分查找(Binary Search)
二分查找(Binary Search)概念模板题目34. 在排序数组中查找元素的第一个和最后一个位置74. 搜索二维矩阵33. 搜索旋转排序数组153. 寻找旋转排序数组中的最小值162. 寻找峰值概念二分查找是对已排好序的数组查找特定值的常用方法,二分查找不必遍历整个序列,只需关注序列的边界及中间值即可,因此时间复杂度可以达到O(logn)O(logn)O(logn)模板在一个有序序列中查找关键字keykeykey的模板代码如下int binarySearch(vector<int>
2021-10-15 20:51:55
189
原创 动态规划入门(五)最长公共子序列(LCS)
动态规划入门(五)最长公共子序列(LCS)1143. 最长公共子序列LCS是一类经典的二维dpdpdp问题,设字符串长度分别为mmm,nnn0≤i<m0≤i<m0≤i<m,0≤j<n0≤j<n0≤j<n则我们可以用dp[i][j]dp[i][j]dp[i][j]表示text1text1text1的前iii个序列和text2text2text2的前jjj个序列的最长公共子序列,则dp[i][j]dp[i][j]dp[i][j]的转移方程为dp[i][j]=dp[i
2021-10-14 11:25:50
128
原创 动态规划入门(四) 最长上升子序列(LIS)
动态规划入门(四) 最长上升子序列(LIS)概念动态规划树状数组概念300.最长递增子序列动态规划我们可以定义dp[i]dp[i]dp[i]为以iii结尾的递增子序列长度的最大值(数组dpdpdp的常用套路),则我们可以写出状态转移方程为dp[i]=max(dp[j])+1,(0≤j<i)且nums[j]<nums[i]dp[i]=max(dp[j])+1,(0≤j<i)且nums[j]<nums[i]dp[i]=max(dp[j])+1,(0≤j<i)且nums[j
2021-10-11 21:19:19
210
原创 二叉树基础(三) 线段树(Segment Tree)
二叉树基础(三) 线段树(Segment Tree)概念结构基本操作线段树的建立区间查询区间修改懒惰标记整体代码概念线段树是常用于维护区间信息的数据结构线段树可以在O(logn)O(logn)O(logn)的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作结构线段树将每个长度不为111的区间划分成左右两个区间递归求解,把整个线段划分为一个树形结构,通过合并左右两区间信息来求得该区间的信息。这种数据结构可以方便的进行大部分的区间操作。假设以线段树存储数组a
2021-10-09 19:00:50
170
原创 双指针问题(一) 对撞指针和快慢指针
双指针问题概念双指针问题对撞指针快慢指针滑动窗口概念双指针是在遍历的过程中,使用两个方向相同或相反的指针进行扫描,从而达到相应目的的算法。双指针充分使用了数组有序的特征,在特定情况下简化运算。双指针问题对撞指针对撞指针将最左侧的索引定义为左指针(left),最右侧的定义为右指针(right),从两头向中间进行数组遍历对撞数组适用于有序的数组和字符串剑指 Offer 21此题要求分奇偶调整数组的顺序,我们可以用左指针寻找奇数,右指针寻找偶数,当左指针找到偶数且右指针找到奇数时,对调两数。代码
2021-10-08 21:14:13
404
原创 二维偏序问题
二维偏序问题偏序问题的概念设RRR是集合AAA上的一个二元关系,若RRR满足:自反性:对任意x∈Ax∈Ax∈A,有xRxxRxxRx反对称性(即反对称关系):对任意x,y∈Ax,y∈Ax,y∈A,若xRyxRyxRy,且yRxyRxyRx,则x=yx=yx=y传递性:对任意x,y,z∈Ax, y,z∈Ax,y,z∈A,若xRyxRyxRy,且yRzyRzyRz,则xRzxRzxRz则称RRR为AAA上的偏序关系,通常记作≼≼≼。注意这里的≼≼≼不必是指一般意义上的“小于或等于”若然有x≼y
2021-10-06 21:44:50
1236
1
原创 树形数据结构(一) 并查集(Union-find)
树形数据结构(一) 并查集(Union-find)概念结构并查集的初始化find()find()find()merge()merge()merge()优化路径压缩按秩合并概念并查集是一种树形数据结构,主要用于解决元素的分组问题,管理一系列不相交的集合,它支持两种操作:合并:将两个不相交的集合合并为一个集合查询:查询元素所在集合结构并查集的一个节点只需要存储它的父节点,即可通过父节点递归寻找到根节点,因此并查集只需要一个一维数组即可实现并查集的初始化并查集使用一个元素代表整个集合,如图,对
2021-10-05 13:58:25
307
原创 二叉树基础(二)二叉搜索树(BST)
二叉树基础(二)二叉搜索树(BST)BST的概念性质结构BST的构造BST的概念二叉搜索树(Binary Search Tree)(又:二叉查找树,二叉排序树),它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树非空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树非空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别是二叉搜索树。二叉搜索树作为一种经典的数据结构,既有快速插入与删除操作的特点,又有快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会
2021-10-05 01:14:28
163
原创 二叉树基础(三)树状数组(Fenwick Tree)
二叉树基础(三)树状数组(Fenwick tree)概念lowbitlowbitlowbit运算结构代码基本操作update()update()update()sum()sum()sum()整体代码概念树状数组(Binary Indexed Tree, Fenwick Tree)是一种用于高效处理对一个存储数字的列表进行更新及求前缀和的数据结构。lowbitlowbitlowbit运算lowbit(x)lowbit(x)lowbit(x)是x的二进制表达式中最低位的1所对应的值,比如:(6)10=
2021-10-02 23:38:06
435
原创 动态规划入门(三)股票问题系列
动态规划入门(三)股票问题系列买卖股票的最佳时机状态转移方程如何表示priceminprice_{min}pricemin边界条件代码买卖股票的最佳时机Ⅱ状态转移方程代码买卖股票的最佳时期含手续费状态转移方程代码买卖股票的最佳时期含冷冻期状态转移方程代码买卖股票的最佳时期Ⅲ思路代码买卖股票的最佳时期Ⅳ股票问题的一般通解状态转移方程边界条件结束语买卖股票的最佳时机121. 买卖股票的最佳时机状态转移方程我们可以用dp[i]dp[i]dp[i]来表示,在前iii日我们可以得到的最大利润,那么我们第ii
2021-09-29 20:29:46
223
原创 二叉树基础(一)二叉树的概念
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-09-28 13:58:19
235
原创 动态规划入门(二)最优子序列系列
53. 最大子序和对于序列nums,我们需要计算以每一个nums[i]结尾的子序列的最大和,最后取最大值得到整个序列的最大子序和。设以nums[i]结尾的最大序列和为dp[i],则dp[i]会在两种情况中进行挑选:1. 以nums[i-1]结尾的最大序列和直接与nums[i]相加2. 抛弃nums[i-1]结尾的最大序列和,只保留nums[i]写成状态转移方程,也就是边界条件为这个转移方程中dp[i]只与dp[i-1]有关,也就是只与上一次的情况有关。这种情况我们可以进行一个空.
2021-09-28 11:12:38
702
1
原创 动态规划入门(一)打家劫舍系列问题
动态规划核心思想动态规划最核心的思想,就在于将问题拆分为一个个子问题,保留之前的计算结果,以达到减少计算量的效果。我们可以举个例子:A: 1+1+1+1+1+1+1+1 = ?B ( 计算 ) : 8A: 在上面等式的左边写上 "1+" 呢?B (脱口而出): 9A: 你怎么这么快就得到答案了?B: 只要在8的基础上加1就好了A: 所以你不用重新计算,因为你记住了第一个等式的值为8。动态规划算法也可以说是记住求过的解来节省时间198. 打家劫舍...
2021-09-27 20:12:45
181
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人