C++
开心生活_
这个作者很懒,什么都没留下…
展开
-
浅谈设计模式
设计模式访问者模式单例模式工厂模式责任链模式我们一直所说C++是一个面向对象的语言,也了解它的三大基本特性:封装、继承和多态,但是这些和工程实践中的联系却是有一点距离,下面来通过四个设计模式来描述一下面向对象在工程实践中的应用。访问者模式情景举例现在我们有一个基类A, 然后有多个子类B、C、D继承于A类,现在我们有一个存放A类指针的数组来存放每一个对象,对于每一个对象执行相应的类操作(这里简化直接输出子类的名字)。经过思考,之前的智能指针dynamic_cast可以胜任这样的工作。进行判断后,可以输原创 2020-12-08 23:18:38 · 110 阅读 · 0 评论 -
最大子段和的分治算法
问题描述给定由 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 · 490 阅读 · 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 · 2932 阅读 · 0 评论 -
墙壁涂色问题--动态规划
问题描述给一个环形的墙壁涂颜色,颜色一共有 k 种,墙壁被竖直地划分成 n 个部分,相邻的部分颜色不能相同。请你写程序计算出一共有多少种给墙壁上色的方案?例如,当 n=5,k=3 时,下面是一种合法的涂色方案而由于墙壁是环形的,所以下面就是一种非法的方案输入输入两个数字 n,k(1≤n≤103,2≤k≤10),分别代表墙壁数量和颜色种类。输出对于每个询问,输出一行整数,合法的墙壁涂色方案数。样例输入15 3样例输出130数据规模与约定时间限制:5 s内存限制:256 M原创 2020-09-29 19:17:40 · 1293 阅读 · 1 评论 -
template模板实现max任意不同类型的比较
问题描述我们再使用C++自带的max比较时, 只能比较相同类型的数据:cout << max(4.5, 6) << endl; // 这句话就会报错故此我们可以使用模板来进行改写。先上代码:#include <iostream>using namespace std;namespace haizei { class Max{ public: template<typename T, typename U>原创 2020-08-06 13:53:31 · 533 阅读 · 0 评论