- 博客(32)
- 收藏
- 关注
原创 Java知识点及内置函数总结——复习篇
本文总结了Java编程中的关键知识点和常用内置函数,主要包括:1)Long.highestOneBit()等数值处理函数;2)StringBuilder的增删改查操作;3)优先队列的创建和使用方法;4)输入输出处理技巧;5)日期时间API;6)栈、队列等数据结构的实现;7)二叉树的构建与遍历(包括层序、前序、中序、后序)。重点讲解了二叉树通过前序+中序序列构建树的完整流程,并提供了直接生成后序遍历的优化方案。这些知识点涵盖了Java编程中常见的数据处理、数据结构和算法实现需求。
2026-04-11 22:55:47
273
1
原创 Java中的数论2——gcd和lcm
本文介绍了Java中计算最大公约数(GCD)和最小公倍数(LCM)的方法。GCD部分提供了递归和迭代两种实现方式,递归法简洁,迭代法高效。LCM通过公式|a*b|/gcd(a,b)计算,并处理了除零和整数溢出问题。文章还指出Java的BigInteger类已内置gcd方法可直接调用。
2026-04-10 20:25:46
65
原创 Java中的日期类
本文介绍了Java中LocalDate日期类的使用方法和应用实例。主要内容包括:1) LocalDate的创建和日期遍历,支持自动校验日期合法性;2) 日期提取方法如getYear()、getMonthValue()等;3) 日期计算和比较操作;4) 通过蓝桥杯竞赛题目展示了实际应用,代码演示了如何遍历日期范围并判断数字特性。文章提供了完整的Java代码示例,展示了LocalDate类在日期处理中的实用功能,适合需要处理日期相关操作的Java开发者参考。
2026-04-08 20:10:42
65
原创 数据结构中的排列组合 —— Java实现
本文介绍了Java中排列组合的计算方法及其应用。排列(A)不考虑顺序,组合(C)考虑顺序,分别给出了对应的数学公式。重点讲解了杨辉三角预处理组合数的方法,通过递推关系实现高效计算。针对排列问题,提出使用阶乘数组和阶乘逆元数组进行优化,以解决模运算中的除法问题。通过两个洛谷例题(P2822和P4071)展示了具体实现,其中P4071涉及错排问题,但由于Java内存限制未能完全AC。文章提供了完整的代码示例和解题思路,适合算法学习者参考。
2026-04-03 10:36:19
317
原创 Java中的进制转换
本文介绍了Java中的进制转换方法,包括十进制转R进制、R进制转十进制以及A进制转B进制。通过两个洛谷例题(B3619和P2084)展示了具体实现代码,讲解了StringBuilder、join()和split()等关键函数的使用技巧。其中重点说明了split()函数处理特殊字符时的转义注意事项,并提供了不同limit参数的行为对比表。文章以简洁的代码示例和清晰的步骤说明,为Java进制转换问题提供了实用解决方案。
2026-04-02 19:53:32
332
原创 Java中的大数处理 —— BigInteger
本文介绍了Java中的BigInteger类,用于处理大数运算。主要内容包括:1)BigInteger的不可变特性;2)两种构造方式(字符串和long值);3)常用常量(ZERO/ONE/TWO);4)基本运算方法(加减乘除、取余、幂运算等);5)两个洛谷例题的实现(P1009阶乘求和和P1303大数乘法)。通过BigInteger类可以方便地解决超出基本数据类型范围的大数计算问题,示例代码展示了如何利用该类进行阶乘运算和大数乘法。
2026-04-01 18:14:16
319
原创 Java中的数论1 —— 快速幂
本文介绍了Java中快速幂算法的实现与应用。针对传统Math.pow()方法精度问题和循环方法效率低下的缺点,提出基于二进制分割的快速幂算法。文章给出了快速幂模板代码,并通过洛谷P1226验证其正确性。随后以两个例题(P8813和P1965)展示快速幂的实际应用:P8813通过剪枝优化处理大数问题,P1965则结合模运算性质将问题转化为快速幂求解。这些案例展示了快速幂在解决指数运算和模运算问题中的高效性和实用性。
2026-04-01 14:28:04
227
原创 Java中的图论3 —— Floyd
本文介绍了Floyd算法及其在Java中的实现。Floyd算法用于解决多源最短路径问题,通过三重循环更新节点间的最短距离,但时间复杂度较高(O(n^3)),不适合大数据场景。文章提供了两个例题:洛谷B3647(基础Floyd实现)和P2910(路径累加应用),并对比了Dijkstra(单源最短路)、Floyd(多源最短路)和Kruskal(最小生成树)三种图论算法的特点。最后通过"反向建图"例题展示了优化思路:结合Dijkstra算法和正反图处理往返路径问题,避免Floyd的高计算量。代
2026-03-31 22:48:30
672
原创 Java中的图论2——Kruskal算法
本文介绍了Kruskal算法在Java中的实现,用于求解最小生成树问题。Kruskal算法结合了图论思想和并查集数据结构,通过按权重排序边并逐步合并不连通的子图来构建最小生成树。文章提供了两个例题的完整代码实现:洛谷P3366模板题和进阶版P2820。算法核心步骤包括边排序、并查集操作和结果统计,强调当边数达到n-1时提前终止循环以提高效率。文章指出掌握并查集是理解该算法的关键,适合作为图论学习的补充内容。
2026-03-31 21:59:57
917
原创 Java中的 Dijkstra 算法
本文介绍了Java中Dijkstra算法的实现与应用。该算法用于求解单源最短路径问题(非负权图),通过贪心策略和优先队列优化实现。文章详细讲解了优先队列的最小堆实现方式、整数快读函数优化方法,并提供了两个典型例题的代码实现:洛谷P3371(标准Dijkstra)和P1144(结合BFS和DP的变种)。特别强调了初始化dist数组的重要性,并给出内存优化建议。代码示例完整展示了邻接表存储、优先队列使用等关键实现细节,适合算法学习者参考实践。
2026-03-27 21:15:55
506
原创 Java中的进阶最长上升子序列——LIS
本文通过两道例题讲解了最长上升子序列(LIS)问题的进阶应用。第一道例题将南岸和北岸城市视为两条线,通过将南岸城市升序排列后求北岸对应序列的最长上升子序列长度来求解航线不相交的最大数量。第二道例题利用Dilworth定理,通过将木材按长度和宽度降序排序后求最长上升子序列长度来得到所需的最少加工时间。两题都展示了如何通过适当的排序将问题转化为LIS问题,并给出了相应的Java实现代码,其中第一题使用升序排序,第二题使用降序排序,体现了根据不同题目要求选择不同排序策略的重要性。
2026-03-26 23:43:11
335
原创 Java中的最长公共子序列——LCS
本文介绍了Java中求解最长公共子序列(LCS)和最长上升子序列(LIS)的算法实现。对于LCS问题,通过建立位置映射数组将问题转化为LIS问题,再使用二分查找优化求解。文中提供了洛谷P1439例题的完整代码实现,并强调了数组大小和输入优化的注意事项。同时简要提及了LIS问题(洛谷P1091),给出了双向动态规划求解的代码示例,最后计算需要移除的最少人数。两题都展示了将复杂问题转化为经典算法问题的解决思路。
2026-03-26 22:03:47
375
原创 Java中的最长上升子序列和非递增子序列——LNIS 和 LIS
本文介绍了Java中求解最长递增子序列(LIS)和最长非递增子序列(LNIS)的两种方法:动态规划和二分查找优化。动态规划通过维护dp数组记录以每个元素结尾的最长子序列长度;二分法则通过维护动态数组来优化存储。文章以洛谷P1020为例,展示了如何应用Dilworth定理解决导弹拦截问题,即最少拦截系统数等于最长严格上升子序列长度。提供了两种实现方式的代码:DP版通过双重循环求解,二分版利用Collections.binarySearch优化查找过程。最后指出动态数组存储的是各长度下的最优末尾元素而非真实子序
2026-03-25 23:14:47
403
原创 Java中的并查集
本文介绍了Java中并查集(Union-Find)数据结构的实现与应用。主要内容包括:1) 并查集的基本概念,通过数组实现多叉树结构;2) 查找(find)操作的两种实现方式,重点讲解路径压缩优化;3) 合并(union)操作的实现方法;4) 三个典型例题的代码实现,包括基础应用(P3367)、简单变种(P1551)和扩展域应用(P1892)。文章详细说明了初始化方式的选择、路径压缩的重要性以及扩展域并查集处理敌对关系的技巧,为算法竞赛中的并查集应用提供了实用指南。
2026-03-22 22:04:21
373
原创 Java中的差分
本文介绍了Java中差分算法的原理和应用。差分是前缀和的逆运算,主要用于高效处理数组区间增减操作。一维差分通过构造差分数组,在指定区间进行加减后还原原数组;二维差分则扩展至矩阵区域操作。文章提供了差分公式、记忆图示和典型例题(洛谷P2367和P3397)的代码实现,包含普通快读和StreamTokenizer优化版本。特别指出二维差分输出优化技巧,避免频繁打印导致的超时问题。差分算法适用于需要频繁区间更新的场景,能显著提升计算效率。
2026-03-21 00:59:42
594
原创 Java中的广度优先搜索——BFS
本文介绍了Java中广度优先搜索(BFS)的实现方法。BFS采用队列结构,按层次遍历图或树结构,与DFS的深度优先不同。文章通过三个例题展示了BFS的具体应用:迷宫寻路使用方向数组遍历邻居;马的遍历处理特殊移动方式;奇怪电梯问题在一维数组中实现BFS。代码示例展示了队列的基本操作(offer/poll/peek)和BFS的核心流程:起点入队、遍历邻居、标记访问、记录距离等。BFS适合求解最短路径问题,其模板化实现使其比DFS更易理解。
2026-03-20 20:27:37
430
原创 Java中的深度优先搜索TWO——DFS
本文分享了Java中DFS算法的三个经典应用案例:全排列问题、组合数问题和八皇后问题。通过洛谷例题展示了DFS的基本实现方法,包括递归、回溯和剪枝技巧。全排列问题使用visited数组标记访问状态;组合问题在n个数中取k个,通过count控制递归终止;八皇后问题则需处理行列和对角线约束。最后还介绍了DFS与DP结合的进阶应用,用于解决滑雪路径问题。作者感慨DFS学习不易,强调反复练习的重要性。代码示例完整,适合算法学习者参考实践。
2026-03-18 16:24:52
373
原创 Java中的深度优先 and 广度优先搜索 ——DFS & BFS
本文介绍了Java中深度优先搜索(DFS)和广度优先搜索(BFS)的实现方法。首先讲解了递归型DFS的基本思路和实现步骤,并通过洛谷P1605例题展示了基础递归DFS代码。随后以洛谷P1141为例,展示了三种解法:递归DFS(会爆栈)、非递归DFS(使用显式栈)和BFS(可获得最短路径)。重点讲解了染色模型的原理,即通过标记连通区域来计算可达格子数。文章还比较了递归与非递归DFS的区别,指出非递归DFS通过手动维护栈避免了爆栈问题。最后给出了各算法的代码实现,帮助读者理解DFS和BFS在路径搜索问题中的应用
2026-03-17 14:57:32
441
1
原创 Java中的动态规划THREE——DP
本文介绍了多重背包问题的两种解法:基础三重循环法和二进制优化法。基础方法通过暴力枚举物品数量实现,适用于计数问题但效率较低;二进制优化法将物品数量按2的幂次分割后转为01背包问题,大幅提升效率。文章通过洛谷P1077和P1776两道例题,分别展示了两种解法的Java代码实现,并指出计数问题不能使用二进制优化。进阶版通过动态数组处理分割后的物品,最终转换为标准01背包问题求解,适用于大规模数据场景。
2026-03-16 19:46:11
232
1
原创 Java中的动态规划TWO——DP
本文介绍了Java中动态规划(DP)的背包问题,重点讲解了01背包、完全背包以及排列组合背包问题的解法。01背包问题中物品只能取一次,代码使用倒序遍历;完全背包问题中物品可无限取,代码使用正序遍历。文章通过洛谷P1048和P1164等例题展示了两种背包问题的实现方式,并比较了求最大值和方案数时的不同状态转移方程写法。最后讨论了排列组合背包问题的区别,指出组合问题通过先遍历物品实现去重,而排列问题通过先遍历容器保留顺序。文中所有解法均附有Java代码实现。
2026-03-14 17:40:03
382
原创 Java中的动态规划ONE——DP
本文探讨了Java中动态规划(DP)与贪心算法的区别及实现方法。动态规划需考虑全局最优解,通过建立dp数组存储子问题最优解来解决复杂问题。文章通过两个例题进行说明:1)洛谷P1048采药问题,使用二维dp数组解决01背包问题;2)C语言网题目3173的魔法传送问题,采用dp[n][2]数组区分使用/不使用魔法的情况。文中强调动态规划适用于需综合考虑多个因素的问题,并提供了完整的Java代码实现,帮助读者理解动态规划的实际应用。
2026-03-13 20:29:04
382
原创 Java中的二分-最大值最小值问题
所谓二分就是将一个长的数据分为两半,中间这个交界处就是我们要找的值,所以称之为二分,二分查找适合**找最大值或最小值**问题。首先,作为查找对象的必须是**有序**的,我们分别用两个指针(Java中用数组下标实现,C语言里可以用指针):left和right,指向数组头和尾,然后用一个mid作为二者的中点,检查mid是否是符合条件,不符合的话,取mid左或者右区间(看实际情况),再执行上述操作。
2026-03-12 21:24:27
388
原创 Java算法中的前缀和
本文介绍了前缀和的概念及其应用。前缀和是通过预处理数组,存储从0到i的元素和,从而将区间求和的时间复杂度优化至O(1)。文中给出了两个应用示例:第一个是蓝桥杯省赛题目,通过动态更新总和计算特定乘积和;第二个是结合同余定理,利用前缀和余数快速统计满足条件的区间数量。代码实现展示了如何在实际问题中应用前缀和技巧,并解释了可能存在的疑问。前缀和在处理大数据量区间求和问题时具有显著优势。
2026-03-11 22:13:54
391
原创 Java中的Hash
本文介绍了Java中HashSet和HashMap的基本用法。HashSet用于存储不重复元素,具有自动去重特性,适用于需要快速判断元素存在的场景。HashMap则用于存储键值对,通过key快速访问value,适用于需要建立映射关系的场景。文章详细说明了两种数据结构的创建方法、常用函数,并通过洛谷P1102例题展示了HashMap的实际应用,提供了基础版和进阶版两种代码实现方案。重点强调了当遇到"去重"或"键值对"需求时,可以考虑使用这两种数据结构来优化算法效率。
2026-03-10 20:09:56
462
原创 Java中的内部类
摘要:本文介绍了Java中的匿名内部类特性,包括其匿名性、一次性使用特点以及语法实现方式。通过洛谷P1012题目为例,展示了如何使用匿名内部类实现自定义排序:利用Comparator接口比较字符串拼接后的字典序来解决问题。相比传统数值比较方法,这种字符串处理方式更高效,避免了超时问题。文章还对比了Comparable和Comparator接口的区别,提供了完整的代码实现方案。
2026-03-10 14:53:46
366
原创 【蓝桥杯例题+讲解-FOUR】:邻接表&树 and 多叉树转二叉树
本文介绍了Java中ArrayList和邻接表的使用方法,重点讲解了蓝桥杯2021年Java省赛A组的一道二叉树题目。文章指出next()函数中判断顺序的重要性,详细说明了ArrayList的创建和常用操作,以及邻接表的实现方式。通过例题解析,展示了如何利用邻接表表示树结构,并采用深度优先搜索思想求解树的最大高度。代码实现部分包含了邻接表构建、DFS遍历和动态规划计算子树深度的完整解决方案,强调了排序子节点深度以优化树结构的关键思路。
2026-03-06 17:54:30
339
原创 【蓝桥杯例题+讲解-THREE】:滑动窗口找最小距离
本文介绍了蓝桥杯A组省赛JAVA题解中的滑动窗口与二分法结合算法。文章首先提出了简化版的next()输入方法,相比FastReader减少代码量但功能相同。核心算法使用滑动窗口检查任意y长度区间内的石头高度总和是否满足条件,结合二分法寻找最小y值。通过例题展示了如何应用该算法解决问题,包括初始化窗口、滑动检查以及二分查找最优解的完整实现。该方法适用于需要检查连续区间满足特定条件的场景,代码简洁高效。
2026-03-04 21:57:26
405
原创 蓝桥杯例题+讲解-TWO
文章摘要: 本文介绍了蓝桥杯竞赛中处理输入输出的优化技巧。首先讲解了FastReader类,它封装了BufferedReader和StringTokenizer,简化了二维数组的读取操作。其次分析了System.out.print()的性能问题,推荐使用StringBuilder来减少IO开销。最后通过2021年蓝桥杯Java省赛A组的一道例题,展示了如何应用这些优化技巧。文章包含代码示例和解题思路,特别强调了位运算在解题中的重要性,并给出了博弈论相关的提示。全文约150字,重点突出竞赛编程中的实用优化方法
2026-03-04 14:54:44
675
原创 【蓝桥杯例题+讲解-ONE】
本文介绍了蓝桥杯竞赛中处理内存限制(MLE)问题的技巧,重点推荐使用BufferedReader和StringTokenizer替代Scanner。文章详细讲解了BufferedReader的创建方法、异常处理,以及StringTokenizer的分词功能,并提供了完整的导入包清单。通过2022年蓝桥杯省赛A组的一道例题,展示了如何应用这些技术读取输入数据并计算完全平方数。最后给出示例代码,提醒注意Math.pow()可能导致的精度问题,建议使用直接乘法运算。文末鼓励参赛者取得好成绩。
2026-03-02 22:12:52
860
原创 计算机组成原理(1)
本文摘要:文章系统介绍了计算机系统的基本组成与工作原理。首先阐述了冯·诺伊曼计算机的五大部件及其特点,重点讲解了存储器的分类(主存、辅存、Cache)、存储介质(半导体、磁表面、光存储器)和存取方式。详细说明了运算器和控制器的组成结构,以及CPU的性能指标。此外,还介绍了计算机语言的层次转换过程,以及主存储器与CPU的连接方式和容量扩展方法。全文涵盖了计算机硬件系统的核心概念和关键部件,为理解计算机体系结构提供了基础性知识框架。
2025-12-22 04:10:06
1062
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅