- 博客(88)
- 收藏
- 关注
原创 笔试题33——双队列解决全排列拼接问题
题目描述:有5个歌单,编号分别为A、B、C、D、E,每个歌单有三首不同的歌。当输入一些歌单名称的时候,每个歌单中输出一首歌到播放列表,并输出所有满足条件的播放列表。输入描述:输入一个仅包含且不重复的A-E的字符串输出描述:输出所有满足条件的播放列表(输出需要有序,字母必须大写)输入:AC输出:A1C1 A1C2 A1C3 A2C1 A2C2 A2C3 A3C1 A3C2 A3C3...
2019-09-17 21:49:15 569
原创 笔试题32——超市找零方案
题目描述:在日常消费中,超市收营员在结算中经常遇到需要给顾客找零的情况。为了节省人力,编写一个程序,要求输入顾客应付金额和实付金额,系统给出合适的找零方案。输入描述:输入应付金额和实付金额输出描述:输出合适的找零方案(注意最后要输出一个分号,所有输出都是英文半角状态,余额保留一位小数)输入:26.5 50输出:23.5 20:1;1:3;0.5:1;核心代码如下:#inclu...
2019-09-16 22:38:28 3251
原创 笔试题31——字符串解析
题目描述:要求输入一行字符串,在这个字符串中括号表示将里面的字符串翻转,输出反转后的字符串,如果字符串括号不匹配,输出空字符串。输入:((ur)oi)输出: iour核心代码如下:#include <iostream>#include <vector>#include <numeric>#include <limits>#inclu...
2019-09-06 16:12:48 417
原创 知识点8——选择排序
选择排序是一种稳定的排序,时间复杂度为O(n^2),其基本概念是:每一次从待排序的数据元素中选出最小(或最大)的元素,存放在序列的起始位置,直到全部待排序的数据元素排完。核心代码如下:#include <iostream>using namespace std;void selectionsort(int* arr, int len) { //基础版 for (int i...
2019-09-06 10:39:34 216
原创 知识点7——插入排序
插入排序是一种稳定的排序,时间复杂度为O(n^2),其基本思想是:将一组数据分成两组,分别称其为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将钙元素插入到有序组当中。核心代码如下:#include <iostream>using namespace std;void insertionsort(int* arr, int len...
2019-09-06 10:28:28 173
原创 知识点6——冒泡排序
冒泡排序是一种稳定的排序,时间复杂度为O(n^2),其基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个...
2019-09-06 10:04:49 316
原创 笔试题30——给无向图中节点绘色,使其满足相邻节点颜色不同
题目描述:给一无向图中各个节点绘色,一共只有两种颜色,使其满足相邻节点颜色不同,并输出其中一种颜色的节点个数及序号;如果不满足,则输出-1。示例:第一行输入节点个数V和边数E,第二行输入E条边(每条边对应的两个节点),例如:7 91 2 1 4 2 3 3 4 2 5 4 5 2 6 5 7 6 7例图:思路:从节点1出发,首先入队列,进行广度优先搜索,依次判断当前节点的相邻节点...
2019-09-01 21:02:41 2327
原创 笔试题29——寻找两个节点的最近公共父节点,并以该父节点为根,求其子树的节点个数
题目描述:给定二叉树和两个顶点,编写一个程序,找到最近的共同祖先,并计算由最近的共同祖先生根的子树的大小。在每个测试用例中,第一行包含四个整数,V(树中的顶点数,顶点数从3到10000),E(边数)和两个顶点的索引。 E边数在第二行。每个边由两个顶点表示; 父顶点的索引始终位于子节点的索引之前。 例如,连接顶点5和8的边缘由“5 8”表示,而不是由“8 5”表示。没有给出边缘的顺序。 输入中的...
2019-08-30 16:53:22 2965
原创 笔试题28——几道浦发小题
题目一:给定一个字符串,里边的单词有空格和字符串分隔,对于逗号分隔的后一位首字母改成大写,其余全部小写。#include <iostream>#include <cstring>#include <string>using namespace std;int main(){ string str; getline(cin, str); i...
2019-08-26 22:31:23 507
原创 笔试题27——字符串中重复的子串
题目描述:找出字符串中重复的子串,如输入abcab,输出a ab b。核心代码如下:#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <string>#include <unordered_map>...
2019-08-25 16:04:03 751
原创 笔试题26——二重01背包问题
题目描述:维克多博士创造了一个裂变反应堆,可取用处于液体状态的放射性物质。反应堆的容量是V加仑。他有N瓶的放射性液体,每个都有一定的质量和一定的体积。当液体倒入反应堆时,也产生一些单位的能量。现在,维克多想要将能量输出最大化。但是,有一个限制条件。他研究了原子元素的物理知识和历史,认识到反应堆内放射性液体的总量不能超过特定的临界质量M,否则反应就会失控,并引发剧烈的爆炸。写一个算法,帮助他从反应...
2019-08-25 15:01:56 1036
原创 笔试题25——memcpy函数的实现
函数原型:void memcpy(voiddest, const void *src, size_t n);用法:#include<string.h>功能:从源src所指的内存地址的起始位置开始,拷贝n个字节的数据到目标dest所指的内存地址的起始位置中。说明:1)src和dest所指内存区域不能重叠,函数返回指向dest的指针。如果src和dest以任何形式出现了重叠,它的结...
2019-08-22 17:10:43 469
转载 笔试题24——String类的实现
这个在面试或笔试的时候常问到或考到。已知类String的原型为:class String{public: String(const char *str = NULL);// 普通构造函数 String(const String &other);// 拷贝构造函数 ~String(void);// 析构函数 String & operator = (con...
2019-08-22 11:30:50 326
原创 笔试题23——无重复字符的最长子串
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思想:遇到子串问题,首先想到的就是滑动窗口技巧。类似之前的思路,使用 window 作为计数器记录窗口中的字符出现次数,然后先向右移动 right,当 window 中出现重复字符时,开始移动 left 缩小窗...
2019-08-21 22:20:29 200
原创 笔试题22——最小覆盖子串
题目描述:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。即要求在源字符串s中找到长度最短的子串,这个子串包含目标字符串t中的所有字符,字符顺序没有要求。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “#”。如果 S 中存在这样的子串,我们保证...
2019-08-21 16:15:47 408
原创 笔试题21——两个大数相乘(笛卡尔乘法、位处理)
题目描述:输入两个大数m,n(0 <= m,n <= 2^100),输出两个数的乘积核心代码如下:#include <iostream>#include <vector>#include <string>#include <cstring>using namespace std;//例子: 123 * 456 = 560...
2019-08-21 10:54:14 638
原创 笔试题20——不同路径2(有障碍物)
题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 :输入:[[0,0,0],...
2019-08-20 15:57:30 1870
原创 笔试题19——不同路径
题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?说明:m 和 n 的值均不超过 100。输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -...
2019-08-20 11:31:31 325
原创 笔试题18——求两个矩形的交集
题目描述:在屏幕坐标系(屏幕左上角是(0,0)点,向下y坐标增大,向右x坐标增大)定义矩阵rect,求两个矩形的交集(无交集时返回null)输入描述:输入两个矩形, x1 y1 w1 h1 x2 y2 w2 h2输出描述:交集的矩形(x y w h),无交集时输出null示例输入:0 0 200 200 100 100 100 100输出:100 100 100 100重点是判...
2019-08-19 21:24:12 2263 1
原创 笔试题17——最长上升子序列(LIS)
最长上升子序列(Longest Increasing Subsequence)问题的大意是:有一个长度为n的数字序列,求它的所有子序列中长度最大的单调上升的序列长度。当然,还有最长不下降子序列问题,最长下降子序列问题,最长不上升子序列问题……本质相同,这里不分别介绍。比如:有长度为7的序列1 7 3 5 9 4 8,它的LIS长度为4,但是LIS不唯一,有1 3 5 9,1 3 5 8,1 ...
2019-08-11 22:36:32 1091
原创 笔试题16——游戏最大成就值(01背包)
题目描述:小王想在接下来一段时间将过去出的游戏全部玩一遍,但是时间有限,于是他给每个游戏标上一个成就值,同时估算了完成这些游戏所需要的时间。现在他只有x天时间,那么,他所玩完的游戏的成就值之和最大能达到多少?(每个游戏必须玩完才能获得成就值)输入:第一行输入case数T(0<T<20)。对于每个case,第一行输入游戏的数目N(0<N<11),总时间X(0<X&...
2019-08-10 17:17:29 533
原创 知识点5——字符串处理+映射
题目描述:给定两个字符集合,一个为全量字符集,一个为已占用字符集。已占用的字符集中的字符不能再使用,要求输出剩余可用字符集。输入描述:输入为一个字符串,字符串中包含了全量字符集合已占用字符集,两个字符集使用@连接。@前的字符集合为全量字符集,@后的字符集合为已占用字符集。输入:a:3,b:5,c:2@a:1,b:2输出:a:2,b:3,c:2核心代码如下:#include <...
2019-08-10 10:40:14 1207
原创 笔试题15——STL中map映射问题
输入:包含多组测试数据,对于每组测试数据:第一行输入两个正整数,空格隔开,需要进行映射的命令的数目N和进行调试时发送的语音指令条数M(1<N<1000,1<M<1000)接下来N行,每行输入两个字符串表示语音指令和对应的动作cmd和action,以空格隔开,每个字符串的长度小于1000,且只有大小写字母;最后M行,每行输入一个字符串表示需要进行调试的语音指令。输出...
2019-08-08 10:46:11 177
原创 笔试题14——背包问题(01、完全、多重)
01背包有N件物品和一个容量为M的背包。第i件物品的费用(即体积)是w[i],价值是 v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。状态转移方程: f[j] = max{f[j] ,f[j - w[i]] + v[i]}核心代码如下:#include <iostream>using namespace std;long f[3000...
2019-08-06 17:11:42 512
转载 笔试题13——击鼓传花
题目描述学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演一个节目。聪明的小赛提...
2019-08-06 11:01:54 1197
原创 笔试题12——反转链表II
题目:反转从位置 m 到 n 的链表。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入:1->2->3->4->5->NULL, m = 2, n = 4输出:1->4->3->2->5->NULL原理类似于前面的反转链表题,核心代码如下:struct ListNode { int val; ListNode...
2019-08-04 22:47:02 186
原创 笔试题11——考试成绩排名
题目描述:学校里有N个同学,老师要按照同学们的考试成绩给大家进行排名,一共有多少种不同的排名可能(成绩相同的同学不计名字次序,算一种排名)?输入描述:每组数据第一行一个整数N,代表有N同学(1 <= N <= 19)。输出描述:对于每组数据输出一个整数占一行,代表N个同学之间的排名有多少种可能。例子:输入23输出313举例:当N为2时,一共3种排名;当N为3...
2019-07-20 21:27:54 1349
原创 知识点4——快速排序
快速排序是一种不稳定的排序,时间复杂度为O(nlogn),但在数组近似有序的情况下,时间复杂度会退化成O(n*n)。基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。算法思路:1.先从队尾开始向前扫描且当low < high时...
2019-07-20 20:53:18 330
原创 知识点3——堆排序
堆排序(从小到大排序)利用大顶堆的堆顶记录的是最大元素这一特性,使得每次从无序中选择最大元素变得简单。其基本思想为(大顶堆):1)将初始待排序关键字序列(R1,R2…Rn)构建成大顶堆,此堆为初始的无序区;2)将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,…,Rn-1)和新的有序区(Rn),且满足R[1,2,…,n-1]<=R[n];;3)由于交换后...
2019-07-18 21:07:32 347
原创 知识点2——归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。主要思路:当排序一个数组的时候,归并排序首先将这个数组分成一半,然后把左边的数组给排序,右边的数组给排序,之后再将它们归并起来;当对左边...
2019-07-18 16:20:15 321
原创 笔试题10——KMP算法
KMP算法(字符串查找算法)算法思想:利用已经部分匹配这个有效信息,保持i指针不回溯,通过修改j指针,让模式串尽量地移动到有效的位置。算法流程:假设现在在文本串s匹配到i位置,模式串p匹配到j位置:1.如果j=-1,或者当前字符匹配成功(即s[i]==p[j]),都令i++,j++,继续匹配下一个字符;2.如果j!=-1,并且当前字符匹配失败(即s[i]!=p[j]),都令i不变,j=...
2019-07-13 09:56:21 395
原创 笔试题9——最少分糖果问题
题目描述:你是学校老师,有n个学生,某次考试后,你让n个学生排成一排,按照他们的分数来给予奖励;奖励为发送糖果,每个孩子至少会得到一个糖果;另外如果某个孩子发现他的分数比相邻同学高,但是糖果却不比他们多,便会不开心,你需要用最少的糖果来让所有孩子开心。输入描述: 第一行 学生数量n 第二行 学生的分数输出描述: 需要最少的糖果数示例:输入580 90 99 80 70输出9核心...
2019-07-02 16:02:34 2497
原创 笔试题8——给定一个节点类型为int的单链表,求离终点距离为k的节点的值是多少
题目描述:给定一个节点类型为int的单链表,求离终点距离为k的节点的值是多少思路:定义两个指针,第一个指针从链表的头指针开始遍历向前走k-1步,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针距离保持在k-1,当地一个指针到达链表的尾节点时,第二个指针正好指向倒数第k个节点。核心代码如下:#include <iostream>#includ...
2019-07-02 10:26:20 344
原创 笔试题7——在数组中找出三个数字和为0的全部组合
题目描述:在数组中找出三个数字使得它们的和为0,找出所有的这种不包含重复的组合思路:首先将数组元素从小到大排序,设三个元素下标i,j,k,将i从头开始遍历,j初始化为i+1,k初始化为n-1;while(j < k)当三元素之和小于0时,j++;当三元素之和大于0时,k–;当三元素之和等于0时,记录此时的i,j,k;while循环结束后执行i++,进行新一轮寻找核心代码如下...
2019-06-30 16:37:30 2680 2
原创 笔试题6——幸福数字
题目介绍:幸福的数字是由以下过程定义的数字:从任何正整数开始,将数字替换为数字的平方和,并重复该过程,直到数字等于1,例如19是幸福数字。给定一个数,计算是不是幸运数。思路:while 该位上的数不为0{1.计算给定数的每位上的数2.计算其每位数上的平方和}如果平方和不为1,返回重新计算该平方和的各个位置上数的新的平方和,1000次后还不为1,可能不是幸运数;如果平方和为1,re...
2019-06-30 10:28:20 1512
原创 笔试题5——最大连续子数列
题目描述:给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。核心代码:#include #include using namespace std;int main(){int a[101];int...
2019-06-28 21:09:16 812
原创 笔试题3——消除重复数字
题目:给定一个整数,给出消除重复数字以后最大的整数。输入描述: 正整数,注意考虑长整数输出描述: 消除重复数字后的最大整数示例:输入 423234输出 432思路:使用栈作为辅助工具,将长整数放入一个数组中,然后从前往后遍历数组:栈为空就压入栈;栈非空,判断当前数组元素是否大于栈顶元素;如果大于,则 判断栈顶元素是否在后面的数组中存在,如果存在就弹出栈顶元素。接着判断栈...
2019-06-26 15:20:35 2050 3
原创 笔试题2——整数反转求和
题目:请您写一个reverseAdd函数,该函数根据输入的两个正整数a和b,然后分别将他们的数字按照高位在右边的方式反转后求和。例如:reverseAdd(123,456)== 321 + 654 == 975程序原型:int reverseAdd(int a,int b)输入:输入的a,b参数均为有效取值范围[1,70000]区间上的正整数。输出:通过函数返回值输出结果;若输入的a或者b...
2019-06-25 20:30:52 1565
转载 知识点1——STL容器汇总
一篇有关STL容器介绍很详细的干货,看完对STL的容器认识清晰了很多,转载自以下作者:作者:涨月薪链接:https://juejin.im/post/5c9de926f265da30b53eb970来源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。C++ STL容器详解STL(标准模板库),是目前C++内置支持的library。它的底层利用了C++类模板和函...
2019-05-27 22:31:24 236
原创 学习笔记48——把字符串转换成整数
题目:请写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。思路:除了实现基本功能,核心在于需要把所有特殊情况都考虑进去,并对这些特殊的输入都定义好合理的输出。核心代码如下:long long StrToIntCore(const char* digit, bool minus);enum Status {kValid = 0, kIn...
2019-05-25 20:51:59 284
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人