随笔分类 - 数据结构与算法Data Structure and Algorithm
摘要:题目:我们用一个等臂天平来称物体的质量,如果我们要称的物体质量范围在1到40克(整数),请问我们最少需要几块砝码可以完成这项物体质量的称量?思路:将上述问题转换为一个数学问题,即通过什么样的数字组合来表示某个范围整数。具体到题目,就是怎么样来表示1到40,可以很快想到我们表示整数的方法,二进制、十进...
阅读全文
摘要:题目:某国家有N个小岛组成,经过多年的基础设施累积,若该岛屿之间建立若干桥梁,先重新完善该国的行政区划,规定只要有桥梁连接的岛屿则归属于同一个城市(可以通过其他岛屿中转),问该国可以划分为多少个城市?思路:并查集代码:#include#includeusing namespace std;class...
阅读全文
摘要:题目:婚介所登记了N位男孩和N位女孩,每个男孩都对N个女孩的喜欢程度做了排序,每个女孩都对N个男孩的喜欢程度做了排序,你作为月老,能否给出稳定的牵手方案?稳定的定义:如果男孩i和女孩a牵手,但男孩i对女孩b更喜欢,而女孩b的男朋友j拼不过男孩i,则没有力量阻碍男孩i和女孩b的私奔,这即是不稳定的。思...
阅读全文
摘要:题目:数独问题:9*9的矩阵,要求每一行,每一列,每个九宫格都是1-9这九个数字且不能重复。给定一9*9矩阵,里面有部分数空缺,要求找出满足上述要求的一个矩阵。 如: 思路:代码:#include#includeusing namespace std;class Sudoku{ private...
阅读全文
摘要:题目:给定非负整数数组,初始时在数组起始位置放置一机器人,数组的每个元素表示在当前位置机器人一步最大能够跳跃的数目。它的目的是用最少的步数到达数组末端。例如:给定数组A=[2,3,1,1,2],最少跳步数目为2,对应的跳法是2->3->2,数组位置变化为0->1->4。[2,3,1,1,2,4,1,...
阅读全文
摘要:题目:A、B、C、D四个人去吃大餐,吃饭去说好,付钱时AA制,但最后结账时,因为4个人带的钱不一样多,最后A付了112元,B付了86元,C付了10元,D没带钱,所以没有付;但AA制需要平摊餐费,所以需要设计一种方案来解决这个问题。现假设有n个人,m个人付款,请通过编程来解决这个问题(解决问题有多种方...
阅读全文
摘要:题目:1、游戏1:有两堆硬币,数量不定(大于0),两个人进行游戏,每个人每次可以从任意一堆取任意数量的硬币(大于0),谁拿走了最后的硬币即为胜者。2、游戏2:一个盒子,里面有一定数量(大于0)的巧克力和一根辣椒 ,两个人进行游戏,每个人每次可以从中拿出1或2或3颗巧克力,辣椒只能最后拿,谁最后拿走了...
阅读全文
摘要:题目:给定一组单词,找出其中的最长单词,且该单词由这组单词中的其他单词组成。思路:首选将单词按照字符串大小从大到小排序,然后依次判断该单词是否由其他单词组成。将单词保存在散列表中,这样容易查找。判断单词组成:依次切分为左右两个字符串,然后递归查找判断。(为避免重复计算,在每一次递归中都保存中间结果,...
阅读全文
摘要:题目:有个内含单词的超大文本,给定任意两个单词,找出这个文件中两个单词的最短距离。思路:通过两个两个变量来记录两个单词最后出现的位置,然后每次计算两者的距离,并更新最小距离。假设需要重复查找任意两个单词的最短距离,则需要构造一个散列表,记录每个单词及其出现的位置。当查找某两个单词的最短距离时,只需找...
阅读全文
摘要:题目:数出0到n(含)中数字2出现了几次。思路:1、暴力方法,数出每个数字包含几个2,然后累加起来。2、分析:分别考虑数字n每一位出现2的次数,如123123;从左往右考虑4123123;考虑第一个1(即第6位),该位出现2的次数为4*10^6/10;考虑第一个2(即第5位),该位出现2的次数为41...
阅读全文
摘要:题目:从大小为n的整数数组A中随机选出m个整数,要求每个元素被选中的概率相同。思路:n选m,等概率情况下,每个数被选中的概率为m/n。方法:初始化:从A中选择前m个元素作为初始数组;随机选择:从第m个元素开始,依次遍历数组下标i,并通过随机生成器生成数字k(生成0~n),如果k#include#in...
阅读全文
摘要:题目:求字符串表达式(不含括号)的值思路:数字分离运算符优先级+-*/只需一个字符串栈,保存数字和运算符代码:#include#include#include#includeusing namespace std;templateout_T convert(const in_T &t){ st...
阅读全文
摘要:题目:求字符串表达式的值,如"-2+(3+4)-5*6",返回-25.思路:分离数字和运算符并考虑运算符的优先级,如(),*,/,+,-等。两个栈:一个存数字,一个存运算符代码:#include#include#include#includeusing namespace std;double ca...
阅读全文
摘要:题目:给定一个整数,打印该整数的汉字描述。(例如:11001:“一万一千零一”)思路:按照以下位数来转换:亿级万级千及千以下代码:由于编程环境不支持中文,故以拼音代替,若需转为汉字,只需改为对应汉字并将代码中的空格符去掉即可。#includeusing namespace std;string bi...
阅读全文
摘要:题目:编写一个方法,洗一副牌,要求做到完美洗牌,即这副牌52!中排列组合出现的概率相同。思路:1、递归2、循环代码:#include#include#includeusing namespace std;int rnd(int lower,int higher){ return rand()%...
阅读全文
摘要:题目:给定一个整数,打印该整数的英文描述。(例如:“One Thousand, Two Hundred Thirty Four”)思路:每三位转换一次,在适当位置插入million,thousand。即:convert(19 323 984)=convert(19)+" million, "+con...
阅读全文
摘要:题目:Given a binary tree, find the maximum path sum.For this problem, a path is defined as any sequence of nodes from some starting node to any node in ...
阅读全文
摘要:题目:Given a stringsand a dictionary of wordsdict, determine ifscan be segmented into a space-separated sequence of one or more dictionary words.For exa...
阅读全文
摘要:题目:给定一数组,里面的数字为1~N,每个数出现一次或两次,求只出现一次的最小数。要求:空间复杂度:O(1),时间复杂度:O(n)思路:题目给定的数字为1~N,因此可以通过交换的方法,将数组下标与数字对应存放,如数字1与下标为0的数字交换,数字3与下标为2的数字交换。1、设置变量min来保存出现两次...
阅读全文
摘要:题目:给定一数组,里面的数字为1~N,每个数出现一次或两次,求只出现一次的最小数。要求:空间复杂度:O(1),时间复杂度:O(n)思路:题目给定的数字为1~N,因此可以通过交换的方法,将数组下标与数字对应存放,如数字1与下标为0的数字交换,数字3与下标为2的数字交换。下面给出两种不同的交换思路:1、...
阅读全文