所有文章
Go常见并发模式
Go语言并发编程的核心在于合理运用各种并发模式。常见模式包括请求-接收模式、单一状态者模式、生产消费模式和Pipeline流水线模式等。这些模式通过goroutine和channel的配合使用,能够有效管理并发程序的状态和数据流,提升代码的健壮性和可维护性,帮助开发者构建高性能的并发应用程序。
2019年9月22日
Leetcode 989. Add to Array-Form of Integer
Leetcode 989题解实现数组形式整数加法算法。将非负整数X的数组形式与整数K相加,返回结果的数组形式。采用优化策略处理不同长度情况,时间复杂度O(N),空间复杂度O(1)或O(len(K))。通过原地修改和反转操作高效处理进位,支持大数运算场景。
2019年2月14日
Leetcode 985. Sum of Even Numbers After Queries
Leetcode 985题解分析,讲解偶数求和查询算法优化方案。通过预计算初始偶数和,避免每次查询重复遍历数组,实现O(N)时间复杂度和O(1)空间复杂度的高效解决方案。代码采用位运算优化奇偶判断,并特别注意负数取模运算的处理细节,提供完整的C++实现代码和性能优化思路。
2019年2月13日
poj 3616 Milking Time
POJ 3616 Milking Time是经典的权值区间动态规划问题。通过将时间区间转换为带权重的区间DP模型,利用排序和状态转移方程求解最优解。算法核心在于处理区间重叠约束,通过dp[i]记录前i个区间的最大收益,最终输出全局最优结果。
2018年7月29日
poj 2385 Apple Catching 0ms
POJ 2385 Apple Catching是经典的动态规划问题,通过三维数组优化实现0ms高效解法。算法核心在于状态转移方程的设计,利用mov函数巧妙处理位置变换,消除冗余循环层。题目要求计算最多移动W次情况下能接到的最大苹果数,采用DP方法有效降低了时间复杂度。
2018年7月14日
poj 2229 Sumsets
POJ 2229 Sumsets是一道动态规划经典题目,探讨整数分解为2的幂次方之和的方案数计算。通过分析数字特征,建立递推关系:偶数时考虑i/2的方案数,奇数时直接继承前一项结果。算法时间复杂度O(n),空间复杂度O(n),关键在于识别2的幂次方分解规律并正确处理模运算。
2018年7月12日
poj 3176 Cow Bowling
poj 3176 Cow Bowling是经典的动态规划问题,采用二维数组存储三角形数据结构。通过自顶向下递推方式,利用状态转移方程计算最大路径和。代码实现包含数组初始化、边界处理和最优子结构构建等关键步骤,时间复杂度O(n²),空间复杂度O(n²),适用于解决数字三角形求解最值的经典算法题型。
2018年7月11日
Poj 3262 Protecting the Flowers
Poj 3262 Protecting the Flowers 是一道经典的贪心算法问题。通过分析代价公式 cost = 2 * T * (total - D),得出按 D/T 比值排序的贪心策略。C++实现采用结构体存储数据,自定义比较函数进行排序,最终计算最小保护代价。该解法时间复杂度为 O(nlogn),空间复杂度为 O(n),是贪心算法的经典应用案例。
2018年7月11日
poj 1017 Packets
POJ 1017 Packets是经典的贪心算法问题,涉及不同尺寸包裹的最优装箱策略。解法采用贪心思想,优先处理大尺寸包裹,通过数学计算确定6x6、5x5等各规格包裹的最优组合方案。代码实现包含完整的装箱逻辑和边界条件处理,时间复杂度O(1),空间复杂度O(1),适用于各类装箱优化场景。
2018年7月10日
poj 3040 Allowance
POJ 3040 Allowance是一道经典的贪心算法题目,涉及货币分配优化问题。通过C++实现的解决方案采用双阶段贪心策略:首先从大面额硬币开始贪心选择,然后用小面额补充至目标值。算法核心在于每次构造最优组合方案,并计算最大可重复次数,最终实现周津贴分配的最大化。
2018年7月10日
