编程练手
日常刷题
另一个我竟然存在
不怎么白的小白
展开
-
算法题(六十一):腾讯2017笔试题——编码
题目描述假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。 编写一个函数,输...原创 2019-02-16 19:32:04 · 646 阅读 · 0 评论 -
算法题(六十):好未来2017笔试题——求和
题目描述输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来输入描述:每个测试输入包含2个整数,n和m输出描述:按每个组合的字典序排列输出,每行输出一种组合示例1输入5 5输出1 42 35分析可以用dfs来做,并用一个list来记录;每当sum==m时,去掉list...原创 2019-01-25 17:33:55 · 445 阅读 · 0 评论 -
算法题(五十九):滴滴2017笔试题——数字和为sum的方法数
题目描述给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000) 第二行为n个正整数A[i](32位整数),以空格隔开。输出描述:输出所求的方案数示例1...原创 2019-01-25 16:26:26 · 647 阅读 · 0 评论 -
算法题(五十八):滴滴2017笔试题——进制转换
题目描述给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。输出描述:为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)示例1输入7 2输出111分析进制转换的唯一精髓是包含了多少...原创 2019-01-18 20:34:48 · 240 阅读 · 0 评论 -
算法题(五十七):滴滴2017笔试题——末尾0的个数
题目描述输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2输入描述:输入为一行,n(1 ≤ n ≤ 1000)输出描述:输出一个整数,即题目所求示例1输入10输出2分析思路一:末尾出现0的情况只有因子5*2得到,由于2,6,8都可以看作为因子2,所以因子2的个数大于因子5的个...原创 2019-01-18 20:29:40 · 274 阅读 · 0 评论 -
算法题(五十六):滴滴2017笔试题——地下迷宫
题目描述小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径),小青蛙在迷宫中水平移动一个单位距离需...原创 2019-01-16 21:31:23 · 599 阅读 · 0 评论 -
算法题(五十五):滴滴2017笔试题——餐馆
题目描述某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大输入描述:输入包括m+2行。 第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000) 第二行为n个参数a,即每个桌子可容纳...原创 2019-01-16 20:44:26 · 734 阅读 · 0 评论 -
算法题(五十四):网易2017笔试题——暗黑字符串
题目描述一个只包含'A'、'B'和'C'的字符串,如果存在某一段长度为3的连续子串中恰好'A'、'B'和'C'各有一个,那么这个字符串就是纯净的,否则这个字符串就是暗黑的。例如:BAACAACCBAAA 连续子串"CBA"中包含了'A','B','C'各一个,所以是纯净的字符串AABBCCAABB 不存在一个长度为3的连续子串包含'A','B','C',所以是暗黑的字符串你的任务就是计算...原创 2019-01-14 18:46:43 · 247 阅读 · 0 评论 -
算法题(五十三):小米2017笔试题——树的高度
题目描述现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度输入描述:输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号输出描述:输出树的高度,为一个整数示例1输入50 10 21 31 4...原创 2019-01-09 21:36:57 · 574 阅读 · 0 评论 -
算法题(五十二):网易2017笔试题——跳石板
题目描述小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4-&...原创 2019-01-09 20:52:17 · 355 阅读 · 0 评论 -
算法题(五十一):网易2017笔试题——“构造数列”
题目描述小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:while(!Q.empty()) //队列不空,执行循环{ int x=Q.front(); //取出当前队头的值x Q.pop(); //弹出当前队头 Q.push(x); ...原创 2019-01-08 10:40:57 · 309 阅读 · 0 评论 -
算法题(五十):网易2017笔试题——“洗牌”
题目描述洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。...原创 2019-01-06 11:35:25 · 302 阅读 · 0 评论 -
算法题(四十九):网易2017笔试题——“数字游戏”
题目描述小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中...原创 2019-01-06 10:20:42 · 521 阅读 · 0 评论 -
算法题(四十八):网易2017笔试题——“小易喜欢的单词”
题目描述小易喜欢的单词具有以下特性:1.单词每个字母都是大写字母2.单词没有连续相等的字母3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。例如:小易不喜欢"ABBA",因为这里有两个连续的'B'小易不喜欢"THETXH",因为这里包含子序列"THTH"小易不喜欢"ABACADA",因为这里包含子序列"AAAA"小易喜欢"A&q原创 2018-12-27 19:50:54 · 669 阅读 · 0 评论 -
算法题(四十七):网易2017笔试题——“饥饿的小易”
题目描述小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,01...原创 2018-12-26 20:55:00 · 450 阅读 · 0 评论 -
算法题(四十六):网易2017笔试题——“不要二”
题目描述二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述:每组数组...原创 2018-12-24 19:30:52 · 329 阅读 · 0 评论 -
算法题(四十五):网易2017笔试题——幸运的袋子
题目描述一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程...原创 2018-12-20 20:46:53 · 542 阅读 · 0 评论 -
算法题(四十四):网易2017笔试题——混合颜色
题目描述你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本...原创 2018-12-17 19:15:50 · 377 阅读 · 0 评论 -
算法题(四十三):网易2017笔试题——“数列还原”
题目描述牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和...原创 2018-12-14 15:42:44 · 347 阅读 · 0 评论 -
算法题(四十二):网易2017笔试题——“分苹果”
再思考(大神过来满足成就感啊)如果是每次移动只能给相邻的牛,并且去掉“恰好移动2”条件的话如何解?这样题的难度增加了不少。初步思路是从左到右遍历时,如果arr[i]大于均值,则它一定是向与它最近的一个小于均值的arr[j]补充;如果arr[i]小于均值,则它一定是从与它最近的一个大于均值的arr[j]里补充。代码如代码二所示。输入示例:7, 3, 5, 7, 5, 5, 5, 3输...原创 2018-12-10 19:56:29 · 400 阅读 · 0 评论 -
算法题(四十一):网易2017笔试题——“分田地”
题目描述牛牛和 15 个朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成 16 份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地, 作为牛牛最好的朋友,你希望牛牛取得的田地的价值和尽可能大,你知道这个值最大可以是多少吗?输入描述:每个输入包含 1 个测试用例。每个测试用例的第一行包含两个整数...原创 2018-12-09 14:16:28 · 1136 阅读 · 0 评论 -
算法题(四十):BFS解决网易2017年笔试题——地牢逃脱
题目描述给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢。输入描述:每个输入...原创 2018-12-06 19:38:58 · 289 阅读 · 0 评论 -
算法题(三十九):动态规划解决网易2017年笔试题——“合唱团”
题目描述有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示...原创 2018-11-30 19:39:13 · 436 阅读 · 0 评论 -
堆排序(Java)
1. 堆排序的思想堆具有父结点值大于子结点的特性,所以大顶堆的根结点是堆中值最大的,将根结点与最后一个结点的位置交换后,堆特性被打破;在排除最后一个位置后,再进行堆的更新,使其重新满足堆特性,之后再将新的根结点与倒数第二个位置的数据交换,如此重复直到只剩下根结点一个结点时停止。图像来源2. 代码import java.util.Arrays;public class He...原创 2018-11-26 20:12:34 · 271 阅读 · 0 评论 -
与二叉树相关的算法笔试题集
1. 二叉搜索树(BST)的后序遍历序列2. 序列化/反序列化二叉树3. 找到BST中的第k小的数4. 二叉搜索树转双链表5. 找出所有节点和满足目标数的路径6.根据二叉树的前序遍历和中序遍历数组来重建二叉树7. 判断二叉树是否是平衡二叉树8. 二叉树的深度9. 二叉树的镜像10. 二叉树的下一个结点11. 对称的二叉树12. 按之字形顺序打印二叉树...原创 2018-11-23 11:20:29 · 309 阅读 · 0 评论 -
算法题(三十八):判断树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析从A树根结点开始遍历,如果结点与B树结点相等,则递归判断左子结点和右子结点的情况;若不等,则往下遍历A树左右结点各自与B树的情况。已AC代码public class ChildTree { public static boolean HasSubtree(TreeNo...原创 2018-11-23 11:19:20 · 485 阅读 · 0 评论 -
算法题(三十七):按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。分析用两个栈来实现,先把根结点放入s1,当行数为偶数时,s2从左到右放结点;当行数为奇数时,s1从右到左放结点;笔者用java写的程序不能100%AC,但c++却可以,有大神可以指出来哪里有问题吗?代码一import ja...原创 2018-11-23 10:55:46 · 133 阅读 · 0 评论 -
算法题(三十六):对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。分析从上而下递归扫描,只要发现左右结点不相同的返回false。代码public class Symmetry { public static void main(String[] args) { // TODO Auto-generated metho...原创 2018-11-22 16:59:08 · 191 阅读 · 0 评论 -
算法题(三十五):二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析分情况讨论:1.如果结点有右孩子,则返回右子树中最后一个左孩子;2.如果结点没有右孩子,且该结点是父结点的左孩子,则返回父结点;3.如果结点没有右孩子,且该结点是父结点的右孩子,则向上遍历父结点,返回第一个当前节点是父节点左孩子的...原创 2018-11-22 16:45:25 · 165 阅读 · 0 评论 -
算法题(三十四):二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...原创 2018-11-22 15:31:27 · 187 阅读 · 0 评论 -
算法题(三十三):二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。分析与算法题(三十二):判断二叉树是否是平衡二叉树相似。可以用递归的方法,从下向上遍历各个结点(后序遍历),返回左子树和右子树中深度最大的那个值。代码public class TreeDepth { public static void main...原创 2018-11-21 20:13:59 · 276 阅读 · 0 评论 -
算法题(三十二):判断二叉树是否是平衡二叉树
7. 判断是否是BST题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。分析可以用递归的方法,从下向上遍历各个结点(后序遍历),如果结点是满足BST的条件则返回该结点的高度,如果不满足则直接停止遍历并返回false。代码public class IsBlanceTree { public static void main(String[] args) { ...原创 2018-11-21 20:12:10 · 1550 阅读 · 0 评论 -
算法题(三十一):二叉搜索树(BST)的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析后序遍历序列中,最右边数字也就是根结点,会把数集分为左右两部分,左边数集都小于root,右边数集都大于root。左边数集和右边数集与原数集一样,所以可以用递归来做。代码public class BSTOrder { pu...原创 2018-11-15 20:46:43 · 250 阅读 · 0 评论 -
算法题(三十):约瑟夫环问题
问题描述约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。给定两个int n和m,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。测试样例输入:5 3返回:4分析有两种方法可解这道题,一种是直接模拟该过程,找到最后一个数;另一种是利用数学归...原创 2018-11-14 20:31:57 · 1128 阅读 · 0 评论 -
算法题(二十九)扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2018-11-13 17:10:39 · 619 阅读 · 0 评论 -
算法题(二十八):和为S的两个数
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。分析在数组的头部(H)和尾部(T)开始向内遍历,若H+T小于S,则H肯定不是答案之一,因为不可能有数比T大了;若H+T大于S,则T肯定不是答案之一,因为不可能有数比H小了。而当第一次找到H和T时,这时的H*T也是最小的。牛客网上解释为:考虑x+y=...原创 2018-11-13 15:54:24 · 358 阅读 · 0 评论 -
算法题(二十七):和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?分析有两种方法可解此题1.双指针法规定一个窗口,窗...原创 2018-11-09 19:44:05 · 177 阅读 · 0 评论 -
算法题(二十六):利用堆排序解决找出最小的k个值问题
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。分析问题很简单,升序排序后直接输出前k个,不过要考虑时间复杂度的问题。可以用堆排序,构建有k个值的大顶堆,然后用堆头部与其他值比较,堆头部值较大则调换值,并调整,最后k个值为最小的几个。时间复杂度为nlogk。代码import java.util....原创 2018-11-05 20:20:29 · 1971 阅读 · 1 评论 -
算法题(二十五):序列化/反序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树分析结点为空时用“#”代替,反序列化时,遇到“#”输出null代码public class SerializeTree { public static void main(String[] args) { // TODO Auto-generated method stub TreeNode root = ne...原创 2018-11-02 19:54:02 · 210 阅读 · 0 评论 -
算法题(二十四):找到BST中的第k小的数
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。分析常见方法是用中序遍历算法来做,中序遍历时,输出顺序正好是由小到大。代码import java.util.Stack;public class KthNode { public static int index = 0;...原创 2018-11-02 19:14:53 · 600 阅读 · 0 评论