- 博客(7)
- 收藏
- 关注
原创 二分:你可以安排的最多任务数目
摘要:本文介绍了使用二分法解决最多任务安排问题的算法。给定任务数组、工人数组、药丸数量和药丸强度,要求在不使用或最多使用一片药丸的情况下,计算最多能完成的任务数。算法通过二分查找确定可能的最大任务数,并使用TreeMap和贪心策略验证每个候选值,优先处理容易的任务并合理使用药丸增强工人能力。最终返回满足条件的最大任务数。时间复杂度主要取决于排序和二分验证过程。
2025-06-10 10:55:45
306
原创 二分:切巧克力
该文章介绍了使用二分法解决"切巧克力"问题的思路。题目要求将n块巧克力切成尽可能大的相同尺寸的小方块,总共至少得到k块。算法核心是利用二分法确定最大可能的边长x:通过检查每个x值能切出的总块数是否满足要求,从而缩小搜索范围。时间复杂度为O(nlogn),其中二分查找O(logn),每次检查O(n)。文章包含详细的算法分析、数学公式和Java实现代码,展示了如何通过二分的高效性替代线性枚举来解决最大值问题。
2025-06-09 22:33:29
737
原创 二分:借教室
摘要 本文解决了一个教室借用问题,利用二分查找优化算法效率。核心思想是将问题转化为判断前k个订单是否满足教室借用需求,使用差分数组高效处理区间增减操作。通过二段性特征(前k个订单满足条件而k+1不满足),使用二分查找定位临界点。当所有订单都可满足时输出0,否则输出第一个无法满足的订单编号。算法时间复杂度为O(n log m),适合处理大规模数据。该方法巧妙地将判断性问题与二分搜索结合,展示了算法设计中的转换思维。
2025-06-09 22:31:00
516
原创 单调栈:矩形牛棚
摘要:本文介绍了一个求解矩形牛棚最大空闲区域的算法。题目要求在R×C的网格中找到最大的不含障碍物的矩形面积。算法采用单调栈技术,首先计算每列上的连续空闲高度,然后将问题转化为n次直方图最大矩形求解,最终获得O(n²)的时间复杂度。Java实现中通过预处理高度矩阵,并对每一行应用单调栈算法来计算左右边界,从而求得最大矩形面积。代码展示了完整的实现过程,包括高度预处理和单调栈处理逻辑。
2025-06-08 19:03:55
1039
原创 Java ACM 模式
本文总结了Java在ACM模式下的输入输出方法。输入方面介绍了一维数据的Scanner用法和二维数据的BufferedReader实现,包括自定义Reader工具类和两种使用示例(split分割和逐个读取)。输出方面展示了一维数据的System.out.println()和二维数据的BufferedWriter用法,强调需要flush清空缓冲区。这些方法涵盖了ACM编程中常见的数据处理需求,提供了高效可靠的IO解决方案。
2025-06-07 10:27:09
282
原创 单调栈:直方图中最大的矩形
本文介绍了使用单调栈算法求解直方图最大矩形面积的问题。关键思路是:对于每个柱子i,计算其左右两侧能延伸的最大长度lmax[i]和rmax[i](不含自身),然后以当前柱子高度arr[i]为基准,计算可能的最大矩形面积arr[i]*(lmax[i]+rmax[i]+1)。文章通过数学推导证明无需考虑比当前柱子更小的基准高度,并提供了Java实现代码,包括使用单调栈预处理左右延伸长度、最终取所有可能矩形面积最大值的过程。该算法时间复杂度为O(n),适用于大规模数据。
2025-06-06 21:43:48
798
原创 双指针:牛的学术圈 I
这篇技术博客讨论了如何高效解决"牛的学术圈I"问题,提出了两种解法:二分法和双指针法。 二分法解法: 先将N个数从大到小排序 使用二分法查找最大h值,满足以下条件: 至少有h个数字≥h-1 最多有L个数字等于h-1 时间复杂度为O(nlogn) 双指针法解法: 同样先排序 使用双指针i和j,i从左向右移动,j从右向左移动 维护满足条件的最大h值 时间复杂度优化到O(n) 两种方法都通过巧妙的条件判断和指针移动来提高效率,避免了暴力枚举带来的高时间复杂度。
2025-06-05 20:37:49
1106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人