java
文章平均质量分 84
hefeng_aspnet
软件研发:app、小程序、公众号、网站、电商平台等,有需要可联系作者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 求抛物线的顶点、焦点和准线(Finding the vertex, focus and directrix of a parabola)
已知抛物线方程 $ y = ax^2 + bx + c $,利用公式可求其顶点 $ \left(-\frac{b}{2a}, \frac{4ac - b^2}{4a}\right) $、焦点 $ \left(-\frac{b}{2a}, \frac{4ac - b^2 + 1}{4a}\right) $ 及准线 $ y = c - \frac{b^2 + 1}{4a} $。以 $ a=5, b=3, c=2 $ 为例,计算得顶点为 $(-0.3, 1.55)$,焦点为 $(-0.3, 1.6)$,准线为 $原创 2026-11-03 08:37:40 · 248 阅读 · 0 评论 -
Java 已知三个点,求多边形的最小面积(Minimum area of a Polygon with three points given)
给定正多边形(n>3)的三个顶点,求其最小面积。通过计算三点构成三角形的外接圆半径和各内角,利用最大公约数确定最小边数n,再代入正多边形面积公式 $ A = \frac{n r^2 \sin(2\pi/n)}{2} $ 求解。示例中三点构成直角三角形,外接圆半径为 $ \frac{\sqrt{2}}{2} $,对应正方形(n=4),面积为1.00。时间复杂度 $ O(\log \min(A,B,C)) $,空间复杂度 $ O(1) $。原创 2026-10-29 08:41:00 · 253 阅读 · 0 评论 -
Java 未排序数组中第 k 个最小/最大元素 (预期线性时间)
本文介绍了在未排序数组中查找第k小元素的快速选择算法实现。通过随机化分区策略优化快速排序思想,平均时间复杂度为O(n)。示例代码展示Java实现,在数组{12,3,5,7,4,19,26}中查找第3小元素输出5。该算法是对传统快速选择的改进,适用于元素互异的数组。文末提供多种编程语言的实现参考链接。原创 2026-10-22 08:44:35 · 190 阅读 · 0 评论 -
Java 找出数组中最大的 k 个元素(Find k largest elements in an array)
本文介绍了三种在数组中查找前k大元素的方法: 朴素方法:直接对数组降序排序后取前k个元素。时间复杂度O(n logn),空间复杂度O(1)。 优先级队列(最小堆):维护大小为k的最小堆,遍历数组动态更新堆。时间复杂度O(n logk),空间复杂度O(k)。 快速选择算法:基于快速排序的分区思想,平均时间复杂度O(n),最坏O(n²),空间复杂度O(n)。 示例代码展示了Java实现,并通过输入[1,23,12,9,30,2,50]和k=3验证输出为[50,30,23]。三种方法各有优劣,可根据数据规模和性能原创 2026-10-13 08:39:51 · 249 阅读 · 0 评论 -
Java 从数组构建堆(Building Heap from Array)
本文介绍了如何将整数数组转换为最大堆。最大堆是一种完全二叉树结构,每个父节点的值都大于或等于其子节点。构建方法从最后一个非叶子节点开始,递归地对每个子树进行堆化处理,确保父节点始终大于子节点。文章提供了关键索引计算公式(如左右子节点和父节点的位置),并给出了Java实现代码示例,包括堆化和构建堆的具体步骤。最终输出展示了转换后的最大堆结构。该方法的时间复杂度为O(n),空间复杂度为O(logn)。原创 2026-09-15 08:37:53 · 252 阅读 · 0 评论 -
Java 未排序数组中第 k 个最小/最大元素 | 最坏情况下的线性时间
本文介绍了在未排序数组中找到第k小元素的最坏情况下线性时间算法——中位数选择法。该算法通过将数组分为5元素一组,递归计算中位数的中位数作为枢轴点,确保每次划分的平衡性,从而保证最坏情况下O(n)的时间复杂度。文章详细阐述了算法步骤,包括分组排序、中位数选择、分区操作和递归处理,并提供了C++实现代码。虽然该算法理论性能优秀,但由于常数因子较大,实际应用中随机化快速选择仍更常用。复杂度分析证明该算法满足T(n)≤T(n/5)+T(7n/10)+O(n),最终达到线性时间复杂度。原创 2026-09-08 08:54:00 · 293 阅读 · 0 评论 -
Java 未排序数组中第 k 个最小/最大元素 预期线性时间
该文章介绍了如何在未排序数组中以线性时间复杂度找到第k小的元素。通过随机选择枢轴元素进行快速选择算法,避免了最坏情况下的O(n²)时间复杂度,平均时间复杂度为O(n)。文章包含Java实现代码和详细步骤说明,适用于解决类似问题。原创 2026-09-01 08:36:37 · 259 阅读 · 0 评论 -
Java 第k个最小元素(K’th Smallest Element)
文章摘要: 本文介绍了四种在整数数组中查找第k小元素的方法。1)排序法:直接排序数组后取第k-1个元素,时间复杂度O(nlogn)。2)最大堆法:维护大小为k的最大堆,时间复杂度O(nlogk)。3)快速选择法:基于快速排序的划分思想,平均时间复杂度O(n)。4)计数排序法:适用于元素范围较小的情况,时间复杂度O(n+max)。每种方法均附Java代码示例,适用于不同场景,其中快速选择法在平均情况下效率最优。原创 2026-08-25 08:30:26 · 309 阅读 · 0 评论 -
Java 找出数组中最大的 k 个元素(Find k largest elements in an array)
文章摘要:本文介绍了三种在数组中找出前k个最大元素的方法。1)朴素方法:通过降序排序数组后取前k个元素,时间复杂度O(nlogn);2)优先级队列(最小堆)法:维护一个大小为k的最小堆,遍历数组时动态更新堆内元素,时间复杂度O(nlogk);3)快速选择算法:基于快速排序的分区思想,平均时间复杂度O(n)。三种方法均附有Java实现代码示例,其中堆方法空间效率最优(O(k)),而快速选择在平均情况下时间效率最高。文章最后提供了不同编程语言的快速排序参考链接。原创 2026-08-19 08:40:26 · 323 阅读 · 0 评论 -
Java 从数组构建堆(Building Heap from Array)
本文介绍了如何将数组转换为最大堆。最大堆是一种完全二叉树,每个父节点都大于等于其子节点。构建方法是从最后一个非叶子节点开始,递归地对每个子树进行堆化处理,确保父节点始终大于子节点。时间复杂度为O(n),空间复杂度为O(logn)。示例代码演示了如何通过heapify函数实现这一过程,最终输出构建完成的最大堆数组。文章最后给出了一个具体示例的输入输出结果。原创 2026-08-04 08:51:37 · 311 阅读 · 0 评论 -
Java 从凸包中删除点(Deleting points from Convex Hull)
本文介绍了如何通过分治算法求解点集的凸包,并处理移除某个点后的凸包更新问题。主要内容包括: 凸包求解算法: 使用分治法递归地将点集分割为更小的子集 对小于6个点的子集采用暴力算法直接求解 通过合并操作将子问题的解组合成最终凸包 移除点后的处理: 检查被移除点是否属于当前凸包 如果是则重新计算凸包,否则保持原凸包不变 提供了Java实现示例和复杂度分析 算法特性: 时间复杂度:O(n log n)构建凸包 空间复杂度:O(n) 包含完整的比较函数和几何运算实现 文中还提供了Java 语言的实现原创 2026-07-28 09:01:30 · 326 阅读 · 0 评论 -
Java 利用分治算法求凸包(Convex Hull using Divide and Conquer Algorithm)
本文介绍了计算几何中凸包的概念及其应用,包括碰撞检测、图像处理和数据可视化。重点阐述了分治算法求凸包的实现方法:将点集递归分割后合并左右凸包,通过寻找上下切线确定最终凸包。文章提供了Java实现代码,时间复杂度为O(nlogn),适用于少量点集时采用暴力算法处理。最后展示了算法测试结果及输出示例。原创 2026-07-21 08:44:31 · 336 阅读 · 0 评论 -
Java 两个凸多边形之间的切线(Tangents between two Convex Polygons)
本文提出了一种计算两个凸多边形上下切线的算法。通过确定多边形的最右和最左点,并迭代调整连接线直至不穿过多边形边界,最终得到上下切线。算法时间复杂度为O(n1log(n1)+n2log(n2)),适用于任意凸多边形。文中给出了Java实现示例,以两个具体多边形为例,成功计算出上切线为(0,1)-(3,3)的连接线。该算法在计算几何领域具有重要应用价值。原创 2026-07-14 08:58:06 · 264 阅读 · 0 评论 -
Java 凸包的快速凸包算法(Quickhull Algorithm for Convex Hull)
本文介绍了凸包问题的几种算法,重点分析了QuickHull分治算法。通过示例展示了凸包的计算过程,当点数不足3个时无法构成凸包。文章详细阐述了QuickHull的实现步骤:找到极值点划分区域,递归处理子问题,排除三角形内部点。提供了完整的Java实现代码,使用快速排序处理点集,时间复杂度平均O(nlogn),最坏O(n²)。最后列出了Jarvis算法和Graham扫描法的相关资源链接。原创 2026-07-07 08:31:28 · 316 阅读 · 0 评论 -
Java 基于分治法的快速排序算法(Quick Sort)
快速排序是一种高效的分治排序算法,通过选取枢轴元素将数组分区,使较小元素位于左侧,较大元素位于右侧,然后递归处理子数组。算法包含选择枢轴、分区和递归三个步骤,最坏时间复杂度为O(n²),平均为O(nlogn)。枢轴选择方法包括固定位置、随机选取或中位数法,分区算法则有朴素法、Lomuto法和霍尔法。快速排序优势在于处理大数据集高效、内存占用少,但不稳定且小数据集表现不佳。适用于库函数排序、数据库记录排序等场景。原创 2026-06-24 08:42:48 · 218 阅读 · 0 评论 -
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
摘要:本文介绍了霍尔数组划分算法,该算法以第一个元素为枢轴对数组进行高效分区。算法通过双指针从两端向中间移动,交换不符合条件的元素,时间复杂度O(n),空间复杂度O(1)。示例展示了如何将数组划分为小于枢轴和大于等于枢轴两部分。霍尔算法比洛穆托算法更快,执行更少交换且只需单次遍历,适合实现快速排序。文章包含完整C++代码实现和输出示例。原创 2026-06-02 08:31:54 · 932 阅读 · 0 评论 -
Java Lomuto分区算法(Lomuto Partition Algorithm)
本文介绍了使用Lomuto分区算法对数组进行划分的方法。该算法以数组最后一个元素为枢轴,将小于枢轴的元素移到左侧,大于等于枢轴的元素移到右侧。文章通过示例(如输入[5,13,6,9,12,11,8]输出[5,6,8,13,9,12,11])说明算法原理,并提供了Java实现代码。算法时间复杂度为O(n),空间复杂度O(1)。虽然比Hoare算法效率低,但因其简单易懂,常用于教学场景。文中还提到可通过修改代码实现以任意元素为枢轴的分区。原创 2026-05-19 08:57:36 · 6298 阅读 · 0 评论 -
Java (Naive Partition Algorithm)朴素划分算法
摘要:本文介绍了一种基于临时数组的简单数组分区方法,以最后一个元素为枢轴将数组分为小于等于和大于枢轴的两部分。通过三次遍历实现:首先收集小于等于枢轴的元素,然后添加枢轴元素,最后填充大于枢轴的元素。该方法时间复杂度为O(n),空间复杂度O(n),是一种稳定的分区算法,适用于需要保持元素相对顺序的场景。文中提供了Java实现示例,并分析了算法特点及可能的变体。原创 2026-05-12 08:58:51 · 5937 阅读 · 0 评论 -
Java (Median of an Array)数组的中位数
本文介绍了三种在数组中寻找中位数的方法。朴素方法通过排序数组后直接取中间值,时间复杂度O(nlogn)。优化方法采用随机快速选择算法,平均时间复杂度O(n),但最坏情况为O(n²)。最优方法基于顺序统计量,通过平衡分割实现最坏情况下的线性时间复杂度O(n)。文章详细说明了每种方法的实现原理,并提供了Java代码示例。其中随机快速选择方法在实际应用中表现更优,而理论最优方法实现复杂度较高。原创 2026-04-21 08:46:09 · 9123 阅读 · 0 评论 -
Java(QuickSort using Random Pivoting)使用随机枢轴的快速排序
本文探讨了使用随机枢轴实现快速排序的方法。通过随机选择枢轴元素,可以优化快速排序的平均时间复杂度至O(NlogN),避免最坏情况下的O(N^2)复杂度。文章详细介绍了两种分区方案:Lomuto分区法和Hoare分区法,并提供了相应的Java实现代码。两种方法都通过随机选择枢轴来提高排序效率,其中Lomuto方案将枢轴置于数组末尾进行分割,而Hoare方案则从数组两端向中间扫描交换元素。文章还展示了不使用标准分区方案的随机枢轴实现方法,通过交换随机枢轴元素与末尾元素来简化分区过程。所有实现均包含完整的Java原创 2026-04-14 08:52:09 · 5560 阅读 · 0 评论 -
Java (Implement Quicksort with first element as pivot)以第一个元素为枢轴元素实现快速排序
快速排序是一种分治算法。它选择一个元素作为枢轴,并围绕该枢轴对给定数组进行分区。快速排序有很多不同的版本,它们选择枢轴的方式各不相同。 始终选择第一个元素作为枢轴。始终选择最后一个元素作为枢轴点。随机选择一个元素作为枢轴。选择中位数作为枢轴点。原创 2026-04-08 17:42:40 · 5825 阅读 · 0 评论 -
Java 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
摘要:本文系统介绍了多边形对角线的几何概念,包括基本定义、关键特征和计算公式。对角线是连接不相邻顶点的线段,在凸多边形中完全位于内部。通过公式n(n-3)/2可计算n边形的对角线数量,推导过程考虑了顶点连接和重复计数问题。文中以五边形为例展示了5条对角线,并提供了验证公式的Java代码实现。该内容适用于几何学基础学习,帮助理解多边形对角线的数学原理和计算方法。原创 2026-03-31 08:46:40 · 5789 阅读 · 0 评论 -
Java 两个凸多边形之间的切线(Tangents between two Convex Polygons)
本文介绍了寻找两个凸多边形之间上下切线的方法。算法首先选择多边形A最右点和多边形B最左点作为初始线段,通过调整点位置确保线段不穿过多边形。上切线算法通过逆时针调整点位置使线段位于多边形上方,下切线则相反。示例代码展示了如何计算上切线,包括排序多边形顶点和判断线段方向。该方法的时间复杂度为O(n1 log n1 + n2 log n2),适用于任意凸多边形。原创 2026-03-24 09:00:33 · 5733 阅读 · 0 评论 -
Java 给定 n 个有序顶点的多边形的面积(Area of a polygon with given n ordered vertices)
摘要:本文介绍了使用鞋带公式计算多边形面积的方法。给定有序顶点坐标(顺时针或逆时针),通过叉积运算计算三角形面积之和。公式核心为:面积=1/2|∑x_i y_{i+1} - ∑x_{i+1} y_i|。实现时间复杂度O(n),空间复杂度O(1)。示例展示了(0,1),(2,3),(4,7)三个顶点的计算过程,结果为2。该算法通过将多边形分解为三角形,利用正负面积相抵消的原理准确计算总面积。适用于任意简单多边形,是计算几何中的基础算法。原创 2026-03-17 08:50:50 · 5716 阅读 · 0 评论 -
java LS3/NS3球体生成算法及其实现(LS3/NS3 sphere generation algorithm and its implementation)
本文提出了一种基于48对称性的高效朴素球体体素生成算法(LS3)。该算法将球体分割成48个对称区域(primaquadraginta),仅计算1/48区域的点后通过对称变换生成完整球体。实现包含5种特殊函数处理不同对称情况(如边缘点、重复点等),并使用哈希表高效存储三维坐标点。通过输入球心坐标和半径,算法能正确输出所有整数坐标点及总点数,如半径3时生成102个点。相比传统方法,该算法显著减少了计算量,适合计算机图形学中的体素化显示需求。原创 2026-03-10 08:43:28 · 5404 阅读 · 0 评论 -
Java异常处理深度解析:从基础到架构的设计
本文系统介绍了Java异常处理体系与实践方案。首先解析Java异常分类体系(检查型/非检查型异常)及其设计哲学,随后针对常见异常(NullPointerException、ConcurrentModificationException等)提供多种现代解决方案。文章详细阐述了异常处理的设计模式(异常转译、包装模式、断路器模式)和架构思想,并给出日志记录、多线程处理、微服务异常传播等最佳实践。最后指出异常处理的未来趋势,强调异常处理应作为系统可观测性的核心组成部分,遵循"早失败、快恢复"等核原创 2026-02-03 08:37:02 · 9988 阅读 · 0 评论 -
Java常用算法深度解析:从集合框架到并发编程
本文系统介绍了Java算法生态的核心内容,包括:1)集合框架中的常用算法(排序、查找、极值等);2)Stream API的声明式编程范式;3)排序搜索、数值计算、字符串处理等经典算法实现;4)并发编程中的并行流和Fork/Join框架;5)图算法和设计模式应用。通过代码示例展示了Java从基础到高级的算法实践,帮助开发者根据场景选择合适的工具,提升代码效率和可维护性。原创 2026-01-26 09:25:00 · 10513 阅读 · 0 评论 -
分享一些关于Java应用性能调优技巧与实战案例,提升系统效率
关于Java应用性能调优技巧与实战案例,提升系统效率。包含快速定位、内存优化、CPU优化、并发与线程池优化、数据库优化、JVM参数调优、代码优化技巧、性能测试与监控及相关调优清单和一点建议。原创 2026-01-19 09:37:08 · 4480 阅读 · 0 评论 -
Java 毕达哥拉斯四元组(Pythagorean Quadruple)
勾股定理四元组是指满足a²+b²+c²=d²的整数组合,对应边长和空间对角线均为整数的长方体。本原四元组需满足最大公约数为1,且可通过特定公式生成。示例代码展示如何验证四个数是否构成勾股四元组,时间复杂度为O(1)。该概念在数论和几何中均有应用。原创 2026-01-13 09:20:11 · 5659 阅读 · 0 评论 -
Java 立方体体积和表面积计算程序(Program for Volume and Surface Area of Cube)
立方体是具有六个正方形面的三维图形,所有边长相等,相邻面呈直角。它有12条棱和8个顶点,体积公式为V=a³,表面积为S=6a²(a为边长)。实际应用包括骰子、礼盒等。文章提供了Java代码示例计算立方体体积和表面积,当边长为5时,输出体积125和表面积150。该算法时间复杂度为O(1)。原创 2025-12-30 09:12:04 · 5301 阅读 · 0 评论 -
Java 长方体表面积和体积计算程序(Program for Surface Area and Volume of Cuboid)
摘要:长方体是具有6个矩形面、12条棱和8个顶点的三维几何体,其对面平行且面积相等。通过长度(a)、宽度(b)和高度(c)可计算其体积(V=a×b×c)和表面积(S=2(ab+ac+bc))。示例代码展示了如何用Java计算给定长方体的表面积和体积,时间复杂度为O(1)。长方体广泛应用于建筑、家具等领域。原创 2025-12-09 09:05:26 · 5189 阅读 · 0 评论 -
Java 计算球体的体积和表面积(Calculate Volume and Surface area Of Sphere)
本文介绍了球体的基本概念及其体积和表面积的计算方法。球体是三维空间中到定点距离相等的点的集合,常见于自然界中的水滴、气泡等。计算公式为:体积V=(4/3)πr³,表面积S=4πr²。文中提供了Java示例代码,分别计算半径为5和12时的结果,并解释公式应用。算法时间复杂度和辅助空间均为O(1)。最后邀请读者互动点赞收藏。原创 2025-11-18 09:07:45 · 5252 阅读 · 0 评论 -
Java 计算圆锥的体积和表面积(Calculate volume and surface area of a cone)
本文介绍了圆锥的体积和表面积计算方法。圆锥体积公式为V=1/3πr²h,表面积公式为A=πrs+πr²,其中r为底面半径,h为高度,s为斜高。文中提供了两个计算示例(r=5,s=13,h=12和r=6,s=10,h=8)及对应的Java实现代码。该算法的时间复杂度和空间复杂度均为O(1)。原创 2025-11-11 09:06:53 · 5163 阅读 · 0 评论 -
Java 金字塔体积计算程序(Program for volume of Pyramid)
本文介绍了金字塔的基本概念及其不同类型,包括三棱锥、四棱锥、五棱锥和六棱锥,并给出了每种金字塔的体积计算公式。同时提供了Java程序代码示例来计算这些金字塔的体积,展示了不同底面形状金字塔的具体计算方法。文章最后还输出了示例计算结果,并标注了算法的时间复杂度为O(1)。原创 2025-11-04 09:02:06 · 4783 阅读 · 0 评论 -
Java 计算椭球体积的程序(Program to calculate volume of Ellipsoid)
椭球体是一种三维封闭几何体,其所有平面截面均为椭圆或圆。它具有三条相互垂直的对称轴,通常用半轴长度a、b、c表示。当两轴相等时为旋转椭球体,三轴相等则为球体。标准方程为x²/a²+y²/b²+z²/c²=1,体积公式为(4/3)πabc。文中还提供了Java计算椭球体体积的代码示例,时间复杂度为O(1)。椭球体在几何学中具有重要应用价值。原创 2025-10-28 09:35:51 · 1899 阅读 · 0 评论 -
Java 圆台体积和表面积计算程序(Program for Volume and Surface area of Frustum of Cone)
本文介绍了圆锥台(截头圆锥)的体积和表面积计算方法。圆锥台体积公式为V=1/3πh(r²+R²+rR),其中r、R分别为上下圆半径,h为高度。曲面面积公式为CSA=πl(R+r),总表面积TSA=CSA+π(R²+r²),l为斜高。文中提供了两个计算示例和Java实现代码,演示了如何根据给定参数计算圆锥台的体积、曲面面积和总表面积。文章最后包含互动提示,鼓励读者收藏、点赞和评论。原创 2025-10-21 09:03:38 · 878 阅读 · 0 评论 -
Java 求圆柱体的周长(Find the perimeter of a cylinder)
本文介绍了如何通过圆柱体的直径和高度计算其横截面周长。严格来说,三维圆柱体没有周长,但可通过将圆柱体投影为二维矩形来计算其横截面周长。计算公式为:P=2*(d+h),其中d为直径,h为高度。文章提供了Java代码示例,以直径5、高度10为例,计算结果为30单位。该方法时间复杂度为O(1),空间复杂度O(1)。(94字)原创 2025-10-14 09:17:04 · 537 阅读 · 0 评论 -
Java 找到平行四边形的缺失点(Find the Missing Point of Parallelogram)
摘要:文章介绍了两种求解平行四边形缺失点D的方法。第一种方法通过计算斜率和对边距离,利用向量关系找到可能的D点坐标;第二种简化方法直接使用向量加法公式D=A+C-B。提供了Java代码实现,并给出示例输入输出,如输入A(1,0)、B(1,1)、C(0,1)时输出D(0,0)。两种方法的时间复杂度分别为O(log(logn))和O(1),适用于不同编程需求。原创 2025-09-23 09:00:46 · 738 阅读 · 0 评论 -
Java 在给定斜率的线上找到给定距离处的点(Find points at a given distance on a line of given slope)
本文介绍了如何计算与给定点P(x0,y0)距离为L,且位于斜率为M的直线上的两个点。根据斜率M的不同情况采用三种处理方法:当M=0时调整x坐标;当M无限大时调整y坐标;其他情况使用公式计算坐标偏移量。提供了Java实现代码,通过计算dx和dy确定两点位置,并输出结果。算法时间复杂度为O(1),适用于各种编程语言实现。原创 2025-09-16 09:04:47 · 876 阅读 · 0 评论 -
Java 使用中点查找矩形的角(Find Corners of Rectangle using mid points)
本文介绍了一种计算矩形四个顶点坐标的方法。给定矩形AD和BC边的中点坐标(p,q)及长度L,程序通过三种情况计算顶点坐标:当矩形水平或垂直时直接计算位移;当矩形倾斜时,先计算斜率m,再根据距离公式求出位移dx和dy,最后加减相应位移得到四个顶点坐标。文章提供了Java实现代码,并展示了两个示例输入及其输出结果。该方法的时间复杂度和空间复杂度均为O(1)。原创 2025-09-09 09:00:22 · 1025 阅读 · 0 评论
分享