算法
开心生活_
这个作者很懒,什么都没留下…
展开
-
动态规划-扔鸡蛋问题
作为一道大厂常考的经典的动态规划问题,然而我却忘了,在此记录一下,希望帮助同样的小伙伴门理解并AC它。原创 2020-12-20 15:52:02 · 488 阅读 · 1 评论 -
最大子段和的分治算法
问题描述给定由 n 个整数(可能为负整数)组成的序列,求解其连续的最大字段和。当所有数都是负整数时,最大字段和是 0 .如:a[] = {-2, 11, -4, 13, -5, -2}时, max = 11 + (-4) + 13 = 20.分治算法思想将所给序列a[1:n] 分成a[1:n/2] 和 a[n/2 + 1 : n]两个部分,则最大值有一下三种情况:整个序列的字段和与左半部分相同整个序列的子段和与右半部分相同整个序列的子段和 在两个部分的中间连接部分对应前两种情况利用递归可原创 2020-11-26 20:10:23 · 4010 阅读 · 0 评论 -
快速了解桶排序
桶排序(箱排序)原理及其时间复杂度详解排序充斥着我们的生活,比如站队、排队买票、考试排名、公司业绩排名、将电子邮件按时间排序、QQ 好友列表中的会员红名靠前,等等。这里先举个例子,通过这个例子让我们接触第 1 个算法。在某个期末考试中,老师要把大家的分数排序,比如有 5 个学生,分别考 5、9、5、1、6 分(满分 10 分),从大到小排序应该是 9、6、5、5、1,大家有没有办法写一段程序随机读取 5 个数,然后对它们排序呢?看到这个问题,我们用 5 分钟想一下该怎么办。办法当然很多,这里使用桶排转载 2020-11-24 19:44:43 · 489 阅读 · 0 评论 -
Knapsack算法求01背包问题
// 基本状态的动态规划算法Knapsack求解0-1背包问题//时间复杂度为O(nc)template <class Type>void Knapsack(Type* v, int* w, int c, int n, Type** m) { int jMax = min(c, w[n] - 1); for (int j = 0; j <= jMax; j++) { m[n][j] = 0; // 只看最后一个物品,不可以装下的全部为 0 } for (int j =原创 2020-11-15 19:34:49 · 867 阅读 · 0 评论 -
线性时间选择求第k小数(分治)
**元素选择问题:**给定线性序集中 n 个元素和一个整数 k(1 <= k <= n),要求找出着 n 个元素中第 k 小的元素。RandomizedSelect算法:该算法实际上是模仿快速排序算法设计的,基本思想是对输入的数组进行递归划分。与快速排序的算法不同的是,它只对划分的数组之一进行递归处理。**划分:**以数组的第一个元素作为基准值,设置两个变量分别从前后往中间走,把大于基准值的放在基准值的右半部分,而小于基准值的放在基准值左侧。template<class Type&原创 2020-11-04 14:19:09 · 2928 阅读 · 0 评论