- 博客(11)
- 收藏
- 关注
原创 前缀和:K倍区间
摘要 K倍区间问题要求统计数组中满足区间和为K的倍数的子区间数量。核心思路是利用前缀和与模运算性质:当两个前缀和对K取模结果相同时,它们的差就是K的倍数。通过哈希表cnt[x]记录余数x的出现次数,初始时cnt[0]=1以处理整个前缀和为K倍数的特殊情况。遍历数组时,对每个位置的前缀和计算模值,将相同模值的出现次数累加到结果中,再更新哈希表。时间复杂度为O(n),空间复杂度为O(K)。
2025-06-13 19:18:31
571
原创 递归分治:L 型覆盖问题
L 型覆盖问题要求在2^n×2^n棋盘上放置一个1×1指挥营,其余区域用L形军营填满。本文提出递归分治解法:将棋盘四等分,找出指挥营所在象限,在中心放置L形军营使其他三象限各有一个"假指挥营",然后递归处理各子区域。算法终止条件是2×2棋盘直接放置L形军营。通过递增编号标识不同军营,最后使用映射实现排序。Java实现展示了递归过程和编号处理,时间复杂度为O(n^2)。该方法高效解决了棋盘L形覆盖问题。
2025-06-12 08:29:15
305
原创 贡献法:牛的基因学
题目要求构造DNA序列t,使其与给定序列s的循环移位最大距离。采用贡献法优化: 分析发现每个字母对距离的贡献独立,只需确保每次选择出现次数最多的字母 统计s中各字母出现频率,找出最大值及其对应字母数量 结果等于字母数量的n次方(需取模) 算法将时间复杂度优化至O(n),避免了暴力计算的O(n³)复杂度。最终利用快速幂计算大数结果。该方法巧妙利用了字母贡献的独立性,通过数学分析简化了问题。
2025-06-12 08:25:57
1271
原创 贡献法:孤独的照片
摘要 本文介绍了使用"贡献法"解决孤独照片问题的算法思路。照片中每头孤独的牛(G或H)可以成为孤独区间的核心,通过预处理左、右两侧连续不同牛的数量,可在O(n)时间内统计所有可能的孤独区间。方法包括:计算左右两侧H数量的乘积、左侧至少2个H时的区间数、右侧至少2个H时的区间数。最终将所有符合条件的区间数累加得到答案。该算法避免了O(n^2)的暴力解法,实现了高效求解。
2025-06-11 20:41:29
771
原创 二分:你可以安排的最多任务数目
摘要:本文介绍了使用二分法解决最多任务安排问题的算法。给定任务数组、工人数组、药丸数量和药丸强度,要求在不使用或最多使用一片药丸的情况下,计算最多能完成的任务数。算法通过二分查找确定可能的最大任务数,并使用TreeMap和贪心策略验证每个候选值,优先处理容易的任务并合理使用药丸增强工人能力。最终返回满足条件的最大任务数。时间复杂度主要取决于排序和二分验证过程。
2025-06-10 10:55:45
372
原创 二分:切巧克力
该文章介绍了使用二分法解决"切巧克力"问题的思路。题目要求将n块巧克力切成尽可能大的相同尺寸的小方块,总共至少得到k块。算法核心是利用二分法确定最大可能的边长x:通过检查每个x值能切出的总块数是否满足要求,从而缩小搜索范围。时间复杂度为O(nlogn),其中二分查找O(logn),每次检查O(n)。文章包含详细的算法分析、数学公式和Java实现代码,展示了如何通过二分的高效性替代线性枚举来解决最大值问题。
2025-06-09 22:33:29
1010
原创 二分:借教室
摘要 本文解决了一个教室借用问题,利用二分查找优化算法效率。核心思想是将问题转化为判断前k个订单是否满足教室借用需求,使用差分数组高效处理区间增减操作。通过二段性特征(前k个订单满足条件而k+1不满足),使用二分查找定位临界点。当所有订单都可满足时输出0,否则输出第一个无法满足的订单编号。算法时间复杂度为O(n log m),适合处理大规模数据。该方法巧妙地将判断性问题与二分搜索结合,展示了算法设计中的转换思维。
2025-06-09 22:31:00
794
原创 单调栈:矩形牛棚
摘要:本文介绍了一个求解矩形牛棚最大空闲区域的算法。题目要求在R×C的网格中找到最大的不含障碍物的矩形面积。算法采用单调栈技术,首先计算每列上的连续空闲高度,然后将问题转化为n次直方图最大矩形求解,最终获得O(n²)的时间复杂度。Java实现中通过预处理高度矩阵,并对每一行应用单调栈算法来计算左右边界,从而求得最大矩形面积。代码展示了完整的实现过程,包括高度预处理和单调栈处理逻辑。
2025-06-08 19:03:55
1041
原创 Java ACM 模式
本文总结了Java在ACM模式下的输入输出方法。输入方面介绍了一维数据的Scanner用法和二维数据的BufferedReader实现,包括自定义Reader工具类和两种使用示例(split分割和逐个读取)。输出方面展示了一维数据的System.out.println()和二维数据的BufferedWriter用法,强调需要flush清空缓冲区。这些方法涵盖了ACM编程中常见的数据处理需求,提供了高效可靠的IO解决方案。
2025-06-07 10:27:09
283
原创 单调栈:直方图中最大的矩形
本文介绍了使用单调栈算法求解直方图最大矩形面积的问题。关键思路是:对于每个柱子i,计算其左右两侧能延伸的最大长度lmax[i]和rmax[i](不含自身),然后以当前柱子高度arr[i]为基准,计算可能的最大矩形面积arr[i]*(lmax[i]+rmax[i]+1)。文章通过数学推导证明无需考虑比当前柱子更小的基准高度,并提供了Java实现代码,包括使用单调栈预处理左右延伸长度、最终取所有可能矩形面积最大值的过程。该算法时间复杂度为O(n),适用于大规模数据。
2025-06-06 21:43:48
802
原创 双指针:牛的学术圈 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
1187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人