- 博客(1318)
- 资源 (18)
- 收藏
- 关注

原创 JVM-GC算法
JVM垃圾回收(GC)算法是Java内存管理的核心技术。常见的GC算法包括标记-清除、复制、标记-整理和分代收集算法。标记-清除算法会产生内存碎片;复制算法将内存分为两块,但浪费空间;标记-整理算法解决了碎片问题;分代收集则根据对象生命周期将堆分为新生代和老年代,采用不同算法。这些算法各有优缺点,JVM根据应用场景选择合适的GC策略来优化性能。
2025-08-20 15:22:10
533

原创 java-ZJ4_附加题
摘要:本文展示了一个Java实现的魔方旋转模拟程序。程序通过递归方法在5次操作内探索魔方所有可能的旋转组合(包括绕x、y、z三个轴的顺时针/逆时针旋转),并计算每种状态下魔方的"美观度"(beauty值)。核心算法包括三维坐标系的旋转操作和状态回溯,使用二维数组表示魔方各面块的编号分布。程序输入为24个数字表示的初始魔方状态,输出为在限定操作次数内能获得的最大美观度值。
2025-08-09 06:37:27
106

原创 java-NC408_第_K_小的距离对
文章摘要: 该Java代码实现了找出数组中第K小的距离对的三种方法。方法1直接计算所有距离对并排序,方法2通过双指针和二分查找优化,方法3结合排序、二分和双指针实现最优解。核心思路是:先排序数组,然后对距离值进行二分查找,利用双指针统计距离小于等于中间值的对数,从而确定第K小的距离。方法3通过二次二分优化检查过程,时间复杂度最优。该算法适用于处理大规模数据时寻找特定顺序的距离对问题。
2025-08-08 00:20:28
248

原创 java-NC401_K_个不同整数子数组
本文介绍了三种基于双指针的滑动窗口方法来解决"K个不同整数子数组"问题。核心思路是将问题转化为"最多K个不同整数的子数组个数"减去"最多K-1个不同整数的子数组个数"。方法一和方法二分别实现了这一思路,其中方法二对代码进行了简化优化。方法三尝试合并两个滑动窗口的计算过程。所有方法都使用哈希表来统计窗口内数字出现次数,并通过移动左右指针来维护有效窗口,最终计算出满足条件的子数组数量。时间复杂度为O(n),空间复杂度为O(n)。
2025-08-08 00:17:17
318

原创 java-NC395_滑动窗口中位数
摘要:本文介绍了解决滑动窗口中位数问题的三种Java实现方法。方法1使用双堆(最大堆和最小堆)和双指针,但存在超时问题。方法2在双堆基础上引入哈希表实现延迟删除,优化了性能。方法3核心思路是通过维护两个堆来快速获取中位数,同时处理窗口滑动时的元素增减。当窗口大小为奇数时中位数为最大堆顶元素,偶数时取两堆顶均值。该算法适用于数据流分析和实时统计等场景。
2025-08-07 00:15:32
310

原创 java-NC386_子数组的最小值之和
这篇文章介绍了两种使用动态规划和单调栈解决"子数组的最小值之和"问题的Java实现方法。方法1(solution1)通过维护一个单调递增栈来计算每个元素右边第一个更小元素的索引,然后从右向左动态规划计算以每个元素为开头的子数组最小值之和。方法2(solution2)则使用单调栈找到左边第一个更小元素的索引,从左向右动态规划计算以每个元素结尾的子数组最小值之和。两种方法都利用了单调栈高效地确定边界位置,并通过动态规划避免了重复计算,时间复杂度均为O(n),其中n是数组长度。
2025-08-07 00:11:16
345

原创 java-NC385_划分等和序列
本文介绍了四种解决"划分等和序列"问题的Java方法:1) 动态规划(01背包),通过建立dp数组判断能否组成目标和;2) 深度优先搜索(DFS),遍历解空间寻找可行解;3) 状态压缩+记忆化搜索,利用位运算表示数字状态,优化搜索效率;4) 递归方法。所有方法都先计算数组总和,若不能被k整除则直接返回false。动态规划方法时间复杂度为O(n*sum),DFS方法为指数级复杂度,状态压缩方法适用于n≤15的情况。这些算法都能有效判断能否将数组划分为k个和相等的子集。
2025-08-07 00:10:44
394

原创 java-NC384_132序列
该代码实现了在数组中查找132序列(即存在i<j<k,满足nums[i]<nums[k]<nums[j])的多种解法。对于每个元素j,检查左侧是否有比它小的最小值(i)在右侧查找比j小但比i大的最大值(k)使用二分查找或TreeMap来高效确定k的存在方法1通过维护左侧最小数组和右侧有序列表进行二分查找,方法2则利用TreeMap的ceilingKey方法优化查找过程。当找到满足条件的i,j,k组合时立即返回true,否则遍历完返回false。
2025-08-07 00:10:12
514

原创 java-NC378_两数最大异或值
这篇文章介绍了四种Java解法来解决"两数最大异或值"问题。第一种解法是双重循环遍历,时间复杂度为O(n²);第二种解法通过哈希优化去重;第三种解法结合位运算和哈希,从高位到低位逐步确定最大异或值;第四种解法使用字典树数据结构,通过建树和查询来优化性能。文章提供了详细的实现代码,包括位运算、哈希处理和字典树等不同方法,适用于不同规模和特点的输入数据。
2025-08-06 06:32:05
235

原创 java-NC360_右侧更小数
该代码实现了计算数组中每个元素右侧比它小的元素个数,提供了多种解法,包括二分查找、树状数组、线段树等。主要思路是从右向左遍历数组,维护已处理元素的排序结构,通过二分查找或树状数组高效查询当前元素右侧更小的元素数量。其中,树状数组解法利用离散化处理原始数据,通过动态维护前缀和实现高效查询和更新。代码结构清晰,包含详细的注释说明各种解法的实现原理。
2025-08-05 05:54:37
347

原创 java-NC332_二叉树展开为单链表
本文介绍了五种将二叉树展开为单链表的Java实现方法:1) DFS前序遍历+右链接;2) 栈实现的非递归前序遍历;3) 循环遍历法;4) 递归前序遍历优化版;5) 变体后序遍历法。这些方法均通过修改节点指针将二叉树转为右指针单向链表,保持前序遍历顺序。其中方法5采用右-左-根的后序变体遍历,从后往前处理节点最为巧妙。所有方法时间复杂度均为O(n),空间复杂度从O(n)到O(1)不等。
2025-08-04 06:16:50
107

原创 java-NC323_括号区间匹配
该Java代码使用动态规划解决括号区间匹配问题,计算使字符串s所有括号正确匹配需要插入的最少括号数。算法定义dp[i][j]表示子串[i,j]的最小插入数,处理两种情况:1) 当两端括号匹配时,取中间子串的dp值;2) 遍历所有可能分割点k,取dp[i][k]+dp[k+1][j]的最小值。初始化时单个字符需插入1个括号,最终返回整个字符串的dp[1][n]值。
2025-08-04 06:12:35
282

原创 java-NC309_完全背包
该代码实现了完全背包问题的两种动态规划解法。解法1使用一维数组,分别计算背包能装物品的最大价值和不装满时的最大价值。解法2优化为二维数组,同时计算两种情况。两种方法都遍历物品体积和价值,通过状态转移方程更新dp数组:普通情况直接累加价值,装满情况需确保剩余容量也能装满。最终返回普通和装满两种情况下的最大价值。时间复杂度均为O(v*n),空间复杂度解法1为O(v),解法2为O(2v)。
2025-08-03 00:20:50
105

原创 java-NC308_过河
摘要: 该Java代码解决了NC308过河问题,采用动态规划方法计算最少需要踩到的石子数。主要思路是通过离散化处理优化大范围跳跃问题,使用dp[i]表示跳到位置i的最小石子数。当s=t时直接统计石子数;否则进行离散化处理,将石子位置映射到较小范围(周期为t*(t-1)),然后通过动态规划求解。提供了三种解决方案,其中solution1结合了动态规划和离散化数学法,有效避免了solution2的内存溢出问题。最后在目标位置附近取最小值作为结果。
2025-08-03 00:20:18
97

原创 java-NC305_寻找唯一重复数
这篇文章摘要: 题目:Java实现寻找数组中唯一重复数(NC305)的多种解法 本文介绍了在Java中解决寻找数组中唯一重复数的6种不同方法,针对牛客网NC305题目。主要解法包括: 遍历统计法:使用计数数组统计每个数字出现次数 二分查找法:先排序后二分查找重复数 改进二分法:基于数字范围的统计特性 位运算法:通过二进制位比较确定重复数 其他未展示的解法(solution5和solution6) 文章特别指出测试用例9存在数据问题,并详细分析了各种解法的实现思路和适用场景,包括二分查找和位运算的具体应用原理
2025-08-03 00:18:43
69

原创 java-NC268_矩形覆盖
该题目提供了四种解决矩形覆盖问题的方法:1)数学组合法,通过计算日字形与小矩形竖放的组合数;2)动态规划法,利用斐波那契数列规律;3)优化空间的动态规划;4)递归法。核心思想是发现覆盖方式遵循斐波那契数列规律,即F(n)=F(n-1)+F(n-2),其中n≥3。动态规划解法效率最高,时间复杂度O(n),空间复杂度可优化至O(1)。数学组合法虽直观但计算复杂度较高。递归法简洁但存在重复计算问题。
2025-08-01 06:29:45
119

原创 java-NC215_将二叉搜索树改为累加树
该代码实现了将二叉搜索树转换为累加树的三种解法。累加树的每个节点值等于原树中所有大于等于该节点值的和。解法1和解法2采用递归方式,通过逆中序遍历(右-根-左)累加节点值;解法3使用栈实现迭代的逆中序遍历。核心思想都是从最大的节点开始累加,依次处理每个节点,将当前和赋值给节点。三种方法时间复杂度均为O(n),空间复杂度递归为O(h),迭代为O(n)。
2025-07-30 01:01:04
538

原创 java-NC173_填充数组
摘要:该Java代码解决了填充数组问题,通过动态规划计算填充0的不同方式数。提供了两种解法solution1和solution2(未完整展示),核心思想是处理数组中的零值区间,根据左右边界值计算可能的填充方案数。solution1使用二维DP思想,通过填充次数和取值区间大小的关系推导方案数,最终结果取模1000000007。代码处理了数组边界条件,将问题分解为连续零值区间的组合计算。
2025-07-28 00:13:53
115

原创 java-NC150_二叉树的个数
这篇Java代码实现了计算给定节点数n的不同二叉树个数,提供了多种解决方案。主要方法包括动态规划(方案0-2)和数学法(方案3-4)。动态规划方法通过递推公式计算不同树形数量,而数学法则利用卡塔兰数公式,通过阶乘或递推关系求解。代码还处理了大数运算和模运算问题,使用BigInteger处理大数运算,并引入逆元来处理除法取模。所有方法最终都返回结果对1000000007取模的值,确保结果在合理范围内。
2025-07-27 12:10:44
93

原创 java-NC146_循环右移二叉树
该文介绍了在Java中实现二叉树循环右移的算法。通过层序遍历(BFS)处理二叉树,使用哈希表记录每层节点信息,并将每个节点与其父节点重新连接。具体步骤包括:1)遍历树节点并存储层级和位置信息;2)计算每个节点右移k位后的新位置;3)根据新位置重新连接父节点和子节点。关键点在于计算节点移动后的索引位置,并按计算结果重构父子关系。该方法时间复杂度为O(n),空间复杂度为O(n),其中n为节点数。
2025-07-27 12:09:08
100

原创 java-NC123_序列化二叉树
本文介绍了Java实现二叉树序列化和反序列化的两种方法。序列化部分提供了层序遍历和递归前序遍历两种实现方式:层序遍历(Serialize1)使用队列处理节点,前序遍历(Serialize2)采用递归方式。反序列化部分展示了哈希法(Deserialize1)的实现,通过构建节点映射关系重建二叉树。代码支持处理空节点(用"#"表示),并包含特殊字符处理逻辑。两种序列化方式分别生成不同格式的字符串表示,其中层序遍历结果更直观,而前序遍历更节省空间。该实现适用于二叉树的持久化存储和网络传输场景。
2025-07-26 00:27:34
87

原创 java-NC6_二叉树中的最大路径和
该Java代码实现了计算二叉树中最大路径和的问题。采用后序遍历递归方法,在遍历过程中维护全局最大值sum。对于每个节点,计算两种值:1)包含该节点的最大路径和(可能包含左右子树);2)该节点能为父节点提供的最大路径值(只能选择左或右子树)。通过比较当前节点值与左右子树最大路径值的和,不断更新全局最大值。算法时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高度。
2025-07-23 00:05:20
177

原创 java-MT48_考试策略
该Java程序实现了两种动态规划解法来解决考试策略问题。程序使用Scanner读取输入数据,包括题目部分完成和完全完成的时间和分数。第一种解法solution1采用二维数组实现01背包分组背包,记录不同题目数量下各时间限制的最大得分。第二种解法solution2优化为一维数组实现。两种方法都考虑了题目部分完成和完全完成两种选择,通过动态规划在120分钟时间限制内计算最大得分,最终输出最优解。程序结构清晰,包含详细注释,展示了动态规划在优化问题中的应用。
2025-07-22 06:37:25
220

原创 java-MT46_外卖满减
该Java程序解决了外卖满减问题,提供四种动态规划解法。核心思路是将"达到x元的最低消费"转换为背包问题。解法1和2使用二维和一维DP数组记录达到j元的最低消费;解法3和4逆向思维,计算不超过sum-x元的最高消费,再用总价减去该值得到结果。所有方法都采用01背包思想,通过比较选或不选当前菜品来更新状态。程序支持多组输入,能有效处理不同菜品组合和满减金额的情况。
2025-07-22 06:36:21
222

原创 java-MT22_双袋购物
双袋购物问题描述为:给定n个物品(体积和价值)、两个背包容量bagA和bagB,求将物品分配到两个背包中的最大价值总和。 方法一采用一维背包解法,分别从前向后和从后向前计算每个分割点i时的最优解ansA[i]和ansB[i+1],最后取所有分割点的最大值。 方法二使用二维DP数组,dpA记录前i个物品在bagA的最优解,dpB记录后i个物品在bagB的最优解,通过遍历所有可能的分割点求最大值。 方法三也使用二维DP但会超时,它对每个可能的分割点point都重新计算两个背包的DP数组。
2025-07-21 00:03:28
196

原创 Nowcoder export notes and convert to md files
摘要 该Python脚本实现从牛客网导出用户笔记并转为Markdown文件的功能。主要流程分为三个步骤:1)使用requests获取网页数据;2)通过BeautifulSoup解析HTML提取笔记ID和内容;3)利用html2text将HTML内容转为Markdown格式。脚本支持两种获取笔记ID的方式:直接请求API或从本地文件加载,并自动创建目标目录保存转换后的MD文件。执行过程中包含错误重试机制和请求间隔,确保稳定运行。最终每个笔记以标题命名保存为单独的MD文件。
2025-06-11 00:53:31
250

原创 Nowcoder export solutions and convert to md file
本文介绍了一个将牛客网(Nowcoder)题解导出为Markdown文件的Python脚本实现方案。该脚本主要包含三个处理步骤:1)通过requests库获取网页数据;2)使用BeautifulSoup解析HTML内容;3)借助html2text工具将HTML转换为Markdown格式。脚本支持两种获取题解ID的方式(API接口或读取本地文件),并自动保存为结构化的MD文档,包含标题、原题链接和题解内容。执行过程中加入了延时和重试机制,确保稳定获取数据。最终生成的md文件按题解标题命名,便于整理和查阅。
2025-06-10 10:19:56
263

原创 RAG部署本地知识库
本文介绍了在本地部署RAG知识库的详细步骤。首先提供了包含Ollama、pgvector等关键组件的requirements.txt文件清单。随后分步说明实现流程:1)通过Ollama拉取llama3和nomic-embed-text模型;2)使用Docker启动pgvector数据库服务;3)创建Python3.11虚拟环境并安装依赖包;4)验证Streamlit版本并启动应用。整个过程涉及模型下载、数据库配置、环境搭建和应用程序运行等关键技术环节,为构建本地知识库系统提供了完整的技术实现方案。
2025-06-08 16:50:26
219

原创 PEFT模型微调及推理验证
PEFT(Parameter-Efficient Fine-Tuning)模型微调技术通过调整少量参数实现大模型适配。该方法在保持预训练模型主体参数不变的情况下,仅优化部分网络层或适配器模块,显著降低计算资源需求。实验表明,PEFT在保持90%以上原模型性能的同时,训练参数量减少80%,推理速度提升35%。该技术适用于文本分类、问答系统等NLP任务,为资源受限场景下的大模型部署提供了高效解决方案。
2025-06-08 10:45:44
101

原创 Llama3模型微调量化及部署应用
本文详细介绍了Llama3大语言模型从微调部署到应用落地的完整流程。首先通过LLaMA-Factory工具完成模型微调,配置Python3.11环境并安装相关依赖。接着使用llama.cpp工具链进行模型量化,将HuggingFace格式转换为GGUF格式并执行4-bit量化。最后通过Ollama框架部署量化后的模型,并展示两种应用方案:基于Docker的OpenWebUI(内置RAG功能)和可配置知识库的AnythingLLM系统。全流程涵盖环境搭建、模型优化及实际应用部署,为开发者提供开箱即用的技术方案
2025-06-07 16:06:40
104

原创 Internal Sorting: Natural Two-way Merge Sort: Sorting by Merging
Algorithm NAlgorithm N (Natural two-way merge sort). Records R1,…,RN are sorted using two areas of memory, each of which is capable of holding N records. For convenience, we shall say that the reco
2015-05-31 14:50:13
1249

原创 Internal Sorting: Straight Two-way Merge Sort: Sorting by Merging
Algorithm SAlgorithm S (Straight two-way merge sort). Records R1,… ,RN are sorted using two memory areas as in Algorithm N. S1. [Initialize.] Set s <– 0, p <– 1. (For the significance of variables
2015-05-31 14:46:37
1179

原创 Searching: Balanced Tree Search And Insertion
Algorithm AAlgorithm A (Balanced tree search and insertion). Given a table of records that form a balanced binary tree as described above, this algorithm searches for a given argument K. If K is no
2015-05-31 12:53:49
653
原创 JVM-常用参数一览
JVM常用参数配置摘要: 内存设置:-Xmx/-Xms控制堆大小,-Xss设置线程栈,-XX:MaxMetaspaceSize限定元空间 GC配置:支持多种回收器组合(UseG1GC/UseParNewGC等),可调整代际比例(NewRatio/SurvivorRatio) 监控参数:+PrintGC系列打印GC日志,+HeapDumpOnOutOfMemoryError内存溢出时自动dump 系统参数:设置时区、编码、超时时间等系统级配置 调优参数:可细调各代内存比例、GC线程数等核心参数。
2025-08-20 16:18:59
192
原创 JVM-常见垃圾回收器组合一览
JVM常见垃圾回收器主要包括串行、并行和并发三类。串行回收器(Serial)适用于单线程环境,简单高效但会暂停所有应用线程。并行回收器(Parallel)通过多线程提升吞吐量,包括年轻代的ParNew和老年代的Parallel Old。并发回收器CMS和G1通过并发标记减少停顿时间,其中G1采用分区回收策略,适合大内存应用。ZGC和Shenandoah等新一代回收器进一步降低停顿。选择回收器需权衡吞吐量、延迟和内存占用等指标。
2025-08-20 15:58:34
86
原创 JVM-堆内存分区图
JVM堆内存主要分为新生代和老年代。新生代又分为Eden区、Survivor0和Survivor1,用于存放新创建的对象。老年代存放长期存活的对象。对象先在Eden区分配,Minor GC会回收新生代垃圾对象,存活对象转移到Survivor区,经过多次GC仍存活的对象晋升到老年代。当老年代空间不足时触发Full GC。合理设置各区比例可优化GC性能。
2025-08-20 15:20:29
96
原创 pandoc命令把Markdown文件转换成Word文档
本文介绍了使用Pandoc将Markdown文档转换为Word文件并套用自定义模板的方法。通过pandoc architect_design.md -o architect_design.docx --reference-doc=ref.docx命令,可实现一键排版,保留Markdown中的标题、表格、代码块等内容,同时继承Word模板的字体、段落、页眉页脚等样式。文章详细分解了命令参数,并提供了从安装Pandoc、准备模板、编写Markdown到最终转换的完整操作步骤。
2025-08-12 12:20:27
331
原创 mmdc命令将Mermaid源码文件渲染成高清图片
本文介绍了使用Mermaid CLI工具将Mermaid源码转换为高分辨率PNG图片的完整流程。通过mmdc命令,可指定输入文件、输出尺寸(如6000×4500像素)、背景色等参数,生成适合大屏展示和印刷的清晰图表。文章提供了从安装、准备源码到渲染命令的实战步骤,并分享了博客应用建议,包括暗黑模式适配和图片优化技巧。该方案特别适合需要展示技术架构图等复杂图形的场景。
2025-08-12 12:03:15
442
各种区块链白皮书合集(14种)
2018-08-01
get-pip.py
2015-05-13
Algorithms 4th Edition
2015-02-25
算法导论 英文版 第二版 pdf
2015-02-25
算法导论中文版.pdf
2015-02-25
算法导论 第三版英文版 有索引.pdf
2015-02-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人