
牛客编程题
lMonster81
淡泊以明志,宁静以致远
展开
-
实时中位数
题目描述现有一些随机生成的数字要将其依次传入,请设计一个高效算法,对于每次传入一个数字后,算出当前所有传入数字的中位数。(若传入了偶数个数字则令中位数为第n/2小的数字,n为已传入数字个数)。给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000。测试样例:[1,2,3,4,5,6],6返回:[1,1,2...原创 2019-05-21 20:43:15 · 513 阅读 · 1 评论 -
清除行列
题目描述请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector<vector><int>>),保证n小于等于300,矩阵中的元素为int范围内。</...原创 2019-04-23 22:36:59 · 165 阅读 · 0 评论 -
基本字符串压缩
题目描述利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例"aabccccca...原创 2019-04-23 22:28:01 · 181 阅读 · 0 评论 -
空格替换
题目描述请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个stringiniString为原始的串,以及串的长度 intlen, 返回替换后的string。测试样例:"Mr John Smith”,13返回:"Mr%20John%20Sm...原创 2019-04-23 22:27:25 · 186 阅读 · 0 评论 -
确定两串乱序同构
题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串中的空格。给定一个stringstringA和一个stringstringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。测试样例:"This is nowcoder","is This nowcoder"...原创 2019-04-23 22:24:59 · 162 阅读 · 0 评论 -
整数转化
题目描述编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。给定两个整数intA,intB。请返回需要改变的数位个数。测试样例:10,5返回:4第一种方法:考察异或class Transform {public: int calcCost(int A, int B) { // write code here ...原创 2019-04-26 21:50:58 · 215 阅读 · 0 评论 -
二进制小数
题目描述有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。给定一个doublenum,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。测试样例:0.625返回:0.101知道小数如何转换成二进制就简单了。class BinDec...原创 2019-04-26 21:48:57 · 485 阅读 · 0 评论 -
最近公共祖先
题目描述有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个inta,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:2,3返回:1该题是通过数组来存储二叉树的结点。如果头节点为0开始的,父节点就为...原创 2019-04-26 21:47:59 · 156 阅读 · 0 评论 -
寻找下一个结点
题目描述请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode*root和结点的值intp,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。记住:前序遍历,处理在递归子树前。中序遍历,处理在递归左子树后右子树前。后续遍历,相关处理在右子树后。...原创 2019-04-26 21:29:21 · 174 阅读 · 0 评论 -
检查是否为BST
题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode*root,请返回一个bool,代表该树是否为二叉查找树。错在,二叉查找树是当前结点大于左子树的所有结点,不是只大于左子树的头节点。错误解法:/*struct TreeNode { int val; struct TreeNode *left; st...原创 2019-04-26 21:20:26 · 231 阅读 · 0 评论 -
输出单层结点
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode*root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。错在了忘记设置另一个结点来保存头节点了。即代码中head,直接返回了node。...原创 2019-04-26 21:17:01 · 334 阅读 · 0 评论 -
高度最小的BST
题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[]vals,请返回创建的二叉查找树的高度。高度最小的二叉搜索树,就是左子树和右子树的节点数进行平分。左子树和右子数也是如此。该题不需要建树,所以答案就是log2(n) + 1.如果要建树的话就需要题目提供的数组了。将数组的左一半作为左子树,...原创 2019-04-26 21:15:32 · 277 阅读 · 0 评论 -
有向路径检查
题目描述对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。给定图中的两个结点的指针DirectedGraphNode*a, DirectedGraphNode*b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。注意的点:1.如果有环,不标记的话就可能无限遍历了2.是有向路径,a ->b, b -...原创 2019-04-26 21:13:17 · 226 阅读 · 0 评论 -
二叉树平衡检验
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode*root,请返回一个bool,代表这棵树是否平衡。二叉平衡树:左子树和右子树的高度差小于1。它的左子树和右子树也是如此。我们检验时,先从左子树和右子树检验开始,然后再检查本结点,这样就不会重复检查结点了。返回为结点个数...原创 2019-04-26 21:12:19 · 255 阅读 · 0 评论 -
第二大的数
输入n个整数,查找数组中第二大的数输入描述:第一行n表示n个数,第二行n个空格隔开的数输出描述:输出第二大的数输入例子1:5 1 2 3 4 5输出例子1:4第三大的数同样的解决办法,只不过需要三个变量。#include<iostream>#include<algorithm>#incl...原创 2019-04-17 16:58:16 · 989 阅读 · 0 评论 -
字符迷阵
字符迷阵是一种经典的智力游戏。玩家需要在给定的矩形的字符迷阵中寻找特定的单词。在这题的规则中,单词是如下规定的:1. 在字符迷阵中选取一个字符作为单词的开头;2. 选取右方、下方、或右下45度方向作为单词的延伸方向;3. 以开头的字符,以选定的延伸方向,把连续得到的若干字符拼接在一起,则称为一个单词。以图1为例,如果要在其中寻找单词"WORD",则绿色框所标示的都是合...原创 2019-04-17 16:57:21 · 347 阅读 · 0 评论 -
会话列表
小云正在参与开发一个即时聊天工具,他负责其中的会话列表部分。会话列表为显示为一个从上到下的多行控件,其中每一行表示一个会话,每一个会话都可以以一个唯一正整数id表示。当用户在一个会话中发送或接收信息时,如果该会话已经在会话列表中,则会从原来的位置移到列表的最上方;如果没有在会话列表中,则在会话列表最上方插入该会话。小云在现在要做的工作是测试,他会先把会话列表清空等待接收信息。当接收完大...原创 2019-04-17 16:55:28 · 423 阅读 · 0 评论 -
时钟
小W有一个电子时钟用于显示时间,显示的格式为HH:MM:SS,HH,MM,SS分别表示时,分,秒。其中时的范围为[‘00’,‘01’…‘23’],分的范围为[‘00’,‘01’…‘59’],秒的范围为[‘00’,‘01’…‘59’]。但是有一天小W发现钟表似乎坏了,显示了一个不可能存在的时间“98:23:00”,小W希望改变最少的数字,使得电子时钟显示的时间为一个真实存在的时间,...原创 2019-04-17 16:54:41 · 302 阅读 · 0 评论 -
集和栈
题目描述请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。给定一个操作序列int[][2]ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为...原创 2019-04-23 22:39:10 · 195 阅读 · 0 评论 -
二叉树平衡检验
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode*root,请返回一个bool,代表这棵树是否平衡。返回值表示该树的高度,如果为-1,表示该树不是二叉平衡树。/*struct TreeNode { int val; struct TreeNode...原创 2019-05-05 18:51:44 · 204 阅读 · 0 评论 -
子串判断
题目描述现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串。给定一个string数组p和它的大小n,同时给定strings,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串。保证p中的串长度小于等于8,且p中的串的个数小于等于500,同时保证s的长度小于等于1000。测...原创 2019-05-21 20:42:48 · 569 阅读 · 0 评论 -
最长合成字符串
题目描述有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。测试样例:["a","b","c","ab","bc","abc"],6返回:3class LongestString{public...原创 2019-05-21 20:42:19 · 289 阅读 · 0 评论 -
单词最近距离
题目描述有一篇文章内含多个单词,现给定两个单词,请设计一个高效算法,找出文中这两个单词的最短距离(即最少相隔的单词数,也就是两个单词在文章中位置的差的绝对值)。给定一个string数组article,代表所给文章,同时给定文章的单词数n和待查找的两个单词x和y。请返回两个单词的最短距离。保证两个单词均在文中出现且不相同,同时保证文章单词数小于等于1000。class Dis...原创 2019-05-21 20:41:53 · 647 阅读 · 0 评论 -
下一个较大的元素
题目描述现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。测试样例:[11,13,10,5,12,21,3],7返回:[13,21,12,12,21,-1,-1]栈的运用class NextEl...原创 2019-05-15 20:43:42 · 469 阅读 · 0 评论 -
另类加法
题目描述请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。给定两个intA和B。请返回A+B的值测试样例:1,2返回:3二进制运算A代表进位B代表结果打个二进制的草稿感受一下class UnusualAdd {public: int addAB(int A, int B) { // write c...原创 2019-05-15 20:32:24 · 419 阅读 · 0 评论 -
树转链表
题目描述有一个类似结点的数据结构TreeNode,包含了val属性和指向其它结点的指针。其可以用来表示二叉查找树(其中left指针表示左儿子,right指针表示右儿子)。请编写一个方法,将二叉查找树转换为一个链表,其中二叉查找树的数据结构用TreeNode实现,链表的数据结构用ListNode实现。给定二叉查找树的根结点指针root,请返回转换成的链表的头指针。/*str...原创 2019-05-15 20:21:04 · 281 阅读 · 0 评论 -
最小调整有序
题目描述有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:[2...原创 2019-05-15 20:20:08 · 352 阅读 · 0 评论 -
珠玑妙算
题目描述我们现在有四个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,可能的情况为RGGB(槽1为红色,槽2、3为绿色,槽4为蓝色),作为玩家,你需要试图猜出颜色的组合。比如,你可能猜YRGB。要是你猜对了某个槽的颜色,则算一次“猜中”。要是只是猜对了颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。给定两个stringA和gue...原创 2019-05-15 19:40:16 · 1366 阅读 · 0 评论 -
维护x的秩
题目描述现在我们要读入一串数,同时要求在读入每个数的时候算出它的秩,即在当前数组中小于等于它的数的个数(不包括它自身),请设计一个高效的数据结构和算法来实现这个功能。给定一个int数组A,同时给定它的大小n,请返回一个int数组,元素为每次加入的数的秩。保证数组大小小于等于5000。测试样例:[1,2,3,4,5,6,7],7返回:[0,1,2,3,4,5,6]...原创 2019-05-15 19:39:52 · 231 阅读 · 0 评论 -
叠罗汉II
题目描述叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。为了使叠成的罗汉更稳固,我们应该让上面的人比下面的人更轻一点。现在一个马戏团要表演这个节目,为了视觉效果,我们还要求下面的人的身高比上面的人高。请编写一个算法,计算最多能叠多少人,注意这里所有演员都同时出现。给定一个二维int的数组actors,每个元素有两个值,分别代表一个演员的身高和体重。同时给定演员总数n,请返回最多...原创 2019-05-15 19:39:19 · 728 阅读 · 0 评论 -
叠罗汉I
题目描述叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。同时我们应该让下面的人比上面的人更高一点。已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们最多能叠多少个人。注意这里的人都是先后到的,意味着参加游戏的人的先后顺序与原序列中的顺序应该一致。给定一个int数组men,代表依次来的每个人的身高。同时给定总人数n,请返回最多能叠的人数。保证n小于等于500。...原创 2019-05-15 19:38:12 · 332 阅读 · 0 评论 -
矩阵元素查找
题目描述有一个NxM的整数矩阵,矩阵的行和列都是从小到大有序的。请设计一个高效的查找算法,查找矩阵中元素x的位置。给定一个int有序矩阵mat,同时给定矩阵的大小n和m以及需要查找的元素x,请返回一个二元数组,代表该元素的行号和列号(均从零开始)。保证元素互异。测试样例:[[1,2,3],[4,5,6]],2,3,6返回:[1,2]class Finde...原创 2019-05-15 19:10:34 · 397 阅读 · 0 评论 -
找出字符串
题目描述有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为log级别。给定一个string数组str,同时给定数组大小n和需要查找的stringx,请返回该串的位置(位置从零开始)。测试样例:["a","b","","c","","d"],6,"c"返回:3变形的二分查找,重新设定了mid...原创 2019-05-15 19:09:47 · 299 阅读 · 0 评论 -
约瑟夫问题I
约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。给定两个intn和m,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。测试样例:5 3返回:4有一种数学思想的方法,较为复杂。这里用比较好理解的方法,借助容器来实现。可以...原创 2019-05-05 19:07:06 · 412 阅读 · 0 评论 -
N皇后问题
以前曾经接触过N皇后问题,太久没有做了,再次遇到时,在判断是否可以在该位置放置皇后出现了点小问题导致超时了,所以复习一下。N皇后问题:题目描述请设计一种算法,解决著名的n皇后问题。这里的n皇后问题指在一个nxn的棋盘上放置n个棋子,使得每行每列和每条对角线上都只有一个棋子,求其摆放的方法数。给定一个intn,请返回方法数,保证n小于等于15测试样例:1返回:1...原创 2019-05-05 19:03:10 · 562 阅读 · 0 评论 -
穿点最多的直线
题目描述在二维平面上,有一些点,请找出经过点数最多的那条线。给定一个点集vector<point>p和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vector<double>,代表经过点数最多的那条直线的斜率和截距。</double></point>暴力求解/*struct Point { ...原创 2019-05-05 18:53:06 · 292 阅读 · 0 评论 -
第k个数
题目描述有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。给定一个数intk,请返回第k个数。保证k小于等于100。测试样例:3返回:7之前做过一道求素因子只有2,3,5的,这类题都是用这个思想做的。class KthNumber {public: int findKth(int k) { // write...原创 2019-05-05 18:52:18 · 235 阅读 · 0 评论 -
构造回文
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子1:abcda google输出例子1:...原创 2019-04-17 16:53:16 · 188 阅读 · 0 评论 -
算法基础-字符移位
小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。你能帮帮小Q吗?输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出移位后的字符串。输入例子1:AkleBiCeilD输出例子1:kleieil...原创 2019-04-17 16:49:56 · 161 阅读 · 0 评论 -
拼凑三角形
题目描述牛牛手中有三根木棍,长度分别是a,b,c。牛牛可以把任一一根木棍长度削短,牛牛的目标是让这三根木棍构成一个三角形,并且牛牛还希望这个三角形的周长越大越好。输入描述:输入包括一行,一行中有正整数a, b, c(1 ≤ a, b, c ≤ 100), 以空格分割输出描述:输出一个整数,表示能拼凑出的周长最大的三角形。示例1输入1 2 3输出5如...原创 2019-04-06 21:35:38 · 791 阅读 · 0 评论