- 博客(21)
- 收藏
- 关注
原创 C++常用设计模式2——模板方法模式
模板方法模式可以说是所有设计模式中最简单的,得到了广泛的应用。本文的大部分内容参考了课程https://www.bilibili.com/video/av22292899中的相关内容。1、模式定义模板方法模式就是,先定义一个操作中的算法的骨架,从而将一些步骤延迟到子类来实现,这使得子类可以不改变一个算法的结构即可重定义(override,重写)该算法的某些特定步骤。2、为什么使用模板方法模式?在软...
2018-06-14 13:51:23 358
原创 C++常用设计模式1——单例模式
最近在学习各种设计模式,感觉收获非常多。首先推荐一个视频:https://www.bilibili.com/video/av22292899,不太清楚原版的课程在哪里。这个课的老师讲得非常透彻,听完后有种醍醐灌顶之感。我们知道,C++是一种支持面向对象编程的语言。所谓“面向对象”的三大特性,相信大家都已经滚瓜烂熟:封装、继承、多态。但很多人在实际编程过程中,只是知道皮毛而不是领会“面向对象”的精髓...
2018-06-13 22:06:56 403
原创 经典算法题:寻找数组中第k大的元素
这算是一道相当经典的算法题了:在长度为N的乱序数组中寻找第k(n>=k)大的元素。扩展思考:如何处理数组中的重复元素?比如,对于数组a={1,2,2,2,3,3,3},第二大的元素应该是3还是2呢?本文作这种分类:如果第二大的元素是3,说明在处理第k大的元素时不处理重复的数据,也就是将原数组进行降序排序后,下标为k-1的元素。这种处理方法称之为“不处理重复数据方法”;如果第二大的元素是2,说...
2018-06-13 18:54:06 27257 4
原创 从腾讯和阿里的在线编程题说起——回溯法的程序设计特点
有这么一类编程问题,满足如下的几个特性:1、解空间是有限的,并且规模不太大;2、可以从某个解的一部分开始,通过遍历、添加从这个部分开始能够到达的所有可能性,最终能够到达所有的解。3、很难找到一个确保能得到最优解的策略。这些问题往往就能用暴力搜索算法(搜索-回溯)来解决。当然,上面的三点都是我自己的总结,可能会有不严谨的地方。不过基本上八九不离十。这类问题在各大互联网公司的在线编程考题中频繁出现,因...
2018-06-06 19:26:12 876
原创 多线程同步——有序打印数字和字符
问题描述:创建两个线程,一个线程打印1,2,3,……,52,另一个线程打印A,B,C,……,Z。要求打印出来的效果为:12A34B……5152Z交替有序进行。这时候需要使用到线程间通信。线程1每次打印2个数字,线程2每次打印1个字母。线程1打印完后,通知线程2,并阻塞等待线程2的通知。线程2打印完后,通知线程1,并阻塞等待线程1的通知......直到打印完成。#include<Windows...
2018-06-06 12:05:27 1213
原创 多线程同步——哲学家吃饭问题
最近在学习多线程编程(WIN32API下和C++11标准),学习过程中想起了在学操作系统的时候出现过的“哲学家吃饭问题”,当时听得云里雾里的,理解并不算透彻。恰好最近在学习多线程同步的知识,恰好可以利用最近所学模拟一下这个过程。一、问题描述二、问题分析哲学家就餐问题需要协调考虑两个问题:1、不能让某个哲学家饿死;2、要尽量提升吃饭的效率,也就是同一时间尽量让多一些哲学家吃饭(最多同时两个)。我们考...
2018-06-05 17:39:28 8198 1
原创 拼多多2018暑期实习招聘在线编程题:同花顺
题目描述:给定一组扑克牌,判断其中是否存在五张扑克牌组成同花顺的牌型。每张扑克牌由花色和点值组成。花色包括:黑桃(S)、红桃(H)、梅花(C)、方片(D);点值从小到大包括:2、3、4、5、6、7、8、9、10、J、Q、K、A。组成同花顺的五张牌需要满足两个条件:1、花色都相同:2、连成顺子,或者点值为A、2、3、4、5;输入描述:每张扑克牌通过花色和点值拼接成的一个字符串表示,例如红桃10为H1...
2018-05-31 21:49:27 808
原创 拼多多2018暑期实习招聘在线编程题:迷宫寻路
#include<iostream>#include<vector>#include<string> usingnamespace std; void search(constvector<string>& matrix, vector<vector<int>> left, int& result,intsta
2018-05-31 21:38:33 1650
原创 暴力搜索算法的典型应用——24点游戏
“24点”是个棋牌类益智游戏,要求四个数字运算结果等于二十四。这种类型的题目可以通过编写程序让计算机完成。一个更具有普遍性的题目如下:每次给出五个数和一个目标数,让你判断,利用其中的五个数判断能否通过简单的运算(加,减,乘,除)得到那个目标数。如果能则输出目标数,否则输出这五个数能凑到的小于目标数的最大的那个数。备注:并不要求每个数都要用到,另外除法,必须要求能够进行整除,否则就不进行除法;例如,...
2018-05-24 21:36:04 1160
原创 携程2018暑期实习招聘在线编程题:房间选择
题目描述:有N种房型,每种房型有如下属性:可入住成人数,可入住儿童数,价格;根据用户输入的X(需入住成人数),Y(需入住儿童数),Z(需入住几晚),返回N种房型的间数及价格。 输出样例(特别说明):输入第一行表示一共有几种房型,设为整型N;接下来的N行,每行三列3(个数)分别表示每种房型能够容纳的成人数、能够容纳的儿童数、单价最后一行的三列(3个数)分别表示需要入住的成人数、儿童数,几晚 输出打出...
2018-05-23 11:41:45 518
原创 阿里2018暑期实习招聘在线编程题:订单分配
阿里的在线编程题中有这么一道题:一个淘宝的订单中包含n(10>=n>=1)种商品A1,A2,...,An,每种商品数量分别为a1,a2,...,an个,记做{a1,a2,...,an}(ak>0)。订单在仓库生产过程中,仓库为了提升作业效率,会提前对热门组合商品进行预包装。假设这n个商品有m(9>=m>=1)个商品组合,每个组合bomk包含A1,A2,...,An的数...
2018-05-22 20:15:15 1729 2
原创 科大讯飞2018暑期实习招聘在线编程题:如何分糖果?
原题来源于科大讯飞的一道在线编程题作者:知足常乐_健康第一链接:https://www.nowcoder.com/discuss/76153来源:牛客网小明和小红是好朋友,但最近遇到一个棘手的问题,有一盒糖果要分成两份但是每颗糖果质量都不尽相同,但为了分配的公平每份糖的糖果数量相差不得超过1,在此条件下两份糖果的质量差距尽可能小。输入:一行数,包含一个数n,代表糖果数量,后面一次是n个整数一次表示...
2018-05-13 12:06:48 2130
原创 用动态规划方法找字符串中最长回文子串
LeetCode中有这么一道题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"回文串的定义我就不啰嗦了。对于这道题,我的第一反应是用动态规划方法解。假设字符串s的长度为length,建立一个length*length的矩阵dp。...
2018-05-12 15:25:53 12987 6
原创 多少种走法?
有一类比较有趣的算法题。题目要求的是,按照一定的规则,在一个一维或二维的空间中,走到某个点,一共有多少种走法。我在这里介绍一下我遇到过的题:1、青蛙跳台阶一只青蛙一次只能跳一阶或两阶台阶,总共要跳n阶(n>=1),求总共有多少种跳法?令f(n)为“跳n级台阶共有多少种跳法”。显然,f(1)=1,f(2)=2。那么当n>2时,我们可以对青蛙的第一步进行分类讨论,它第一步要么跳1阶,要么跳...
2018-05-12 15:15:23 1326
原创 深度优先搜索和广度优先搜索的伪代码
1、深度优先搜索(Depth FirstSearch)访问方式类似于树的前序遍历,它可以用递归方式定义如下:(1)选中第一个被访问的顶点;(2)对这个顶点作已访问过的标志;(3)依次从顶点的未被访问过的第1,2,3,……,个邻接顶点出发,对他们进行深度优先搜索;(4)如果还有顶点未被访问,则选中一个起始顶点,转向(2);(5)所有的顶点都被访问到,则结束。要注意,有时候我们无法从一个顶点出发访问其...
2018-05-09 17:20:26 12725
原创 清华操作系统课程学习笔记3
第四章 非连续内存分配一、为什么需要非连续内存分配1、连续内存分配分配给一个程序的物理内存是连续的。缺点:内存利用率低、存在内碎片、外碎片的问题。2、非连续内存分配分配给一个程序的物理地址空间是非连续的。优点:更好的内存利用和管理、允许共享代码与数据、支持动态加载和动态链接。缺点:带来额外的管理开销:如何建立虚拟地址和物理地址之间的转换。两种实现:软件方案和硬件方案
2018-05-09 11:15:07 1204
原创 清华操作系统课程学习笔记2
一、计算机体系结构及内存分层体系1、计算机体系结构/内存分层体系 CPU:对程序的执行的控制内存:放置程序的代码和数据外设:键盘、鼠标、显示器等,完成各种功能。2、内存的层次结构 内存的层次结构研究的是,CPU能够访问的指令和数据所处的位置。从上到下:寄存器、cache,都位于CPU内部,CPU直接访问,操作系统不能对其进行直接管理,但速度很快,容量很少。
2018-05-08 20:50:53 985
原创 清华操作系统课程学习笔记1
最近深感自己操作系统的基础不够扎实(学过的内容全还给老师了),所以就回笼重新学了一遍,这个系列也就是我在学习过程中做的一些笔记。我主要是根据清华大学的操作系统视频课程来学习的。这里要感慨一下,B站真是个神奇的地方,居然有人把这门课的视频都整理好了:https://www.bilibili.com/video/av6538245(以概念、原理讲解为主)https://www.bilibili.com...
2018-05-07 10:55:32 4544
原创 出栈序列有多少种?
在海康威视的面试中,对方问了这么一道题:有一个容量足够大的栈,n个元素以一定的顺序入栈,出栈顺序有多少种?比如,AB两个元素,入栈顺序为AB,出栈情况有两种:(1)入A,出A,入B,出B,出栈顺序为AB;(2)入A,入B,出B,出A,出栈顺序为BA。因此,2个元素时,结果为2。分析:设f(n)为“n个元素以一定的顺序入栈,出栈顺序的种类数”。显然f(1)=1,f(2)=2。我们现在来分析一般情况。...
2018-05-06 17:44:52 23200
原创 兔子繁殖问题
这是一道某互联网公司的笔试编程题,我觉得很有意思:猎人把一对兔子婴儿(一公一母称为一对)放到一个荒岛上,两年之后,它们生下一对小兔,之后开始每年都会生下一对小兔(这对小兔也是一公一母的)。生下的小兔又会以同样的方式继续繁殖。兔子的寿命都是x(x>=3)年,并且生命的最后一年不繁殖。如果岛上的兔子多于10对,那么猎人会每年在兔子们完成繁殖或者仙逝之后,从岛上带走两对最老的兔子。请问y年(y&g...
2018-05-06 17:22:43 1318
原创 计算中缀表达式
“计算中缀表达式”可以称得上是一个特别经典的关于栈的算法题,几乎在所有数据结构教材中都会涉及,而且很多公司面试或者笔试的时候都会把这道题作为一个考察点。可以说,这是一道必须要掌握的算法题。中缀表达式、后缀表达式等概念在这里就不赘述了,让我们直奔主题。题目:输入一个中缀表达式,计算其结果。输入的前提假设:(1)只考虑+、-、*、/这四种运算符,中缀表达式中只有一种括号:();(2)输入的中缀表达式中...
2018-05-06 15:42:10 7674 8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人