![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
高效算法设计
紫书第八章
来老铁干了这碗代码
算法爱好者 终生学习践行者 雨雪刀霜阻不住 不成大神誓不休
展开
-
20行代码AC_ 习题8-1 Bin Packing UVA - 1149(贪心+简单二分解析)
励志用少的代码做高效表达题意给定N个物品的中联L1,背包的容量M,同时要求每个背包最多装两个物品,求至少要多少个背包才能装下所有的物品。解题过程第一次接触背包类问题。最初的思路是降序排序,i从最大值遍历,j从i后遍历,直到找到可以装在一个背包里的两个物体,若无,则把最大值单独装包。时间复杂度为O(n^2),超时且复杂。网搜后,发现更优化的思路是:升序排序,从i最小的值遍历,j从最大的值遍历,若二者和满足条件,则装包, 反之将较大值单独装包。于是我陷入了思考, 为什么只是将排序调整一下,时间复原创 2020-08-29 14:43:55 · 1460 阅读 · 0 评论 -
四种解法——求子序列的最大连续子序和(普通解法、求和解法、分治法、O(n)级解法)(面试经典题)
励志用少的代码做高效表达在这四种解法里,解法一是通法,可以学到规律和知识,做基础之用;解法二在解法一的基础上做改进,锻炼思维;解法三则是大名鼎鼎的分治法,涉及到递归的知识,算是“高效算法设计”的基础;解法四以O(n)的复杂度解出最大连续子序和,一个字,神奇。四种解法循序渐进,效率逐步提高,精妙至极。建议初学者每种都要掌握。解法一:最普通的解法,定义i循环,代表数组从0到n-1的值,定义j循环,代表从a[i]开始,到a[j]结束。 定义k循环,将从a[i]至a[j]所有的数相加,最后求出最大子序列和。原创 2020-08-23 00:52:48 · 1307 阅读 · 1 评论