
程序员面试金典/ 编程测试题 / ACM
HelloZEX
[2018·10·18]所谓核心竞争力,永远是自身的实力!
[2022·4·4]我需要换一个大脑!
展开
-
【编程测试题】保卫方案
题目描述战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作。首都位于一个四面环山的盆地中,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。 一旦发生外地入侵事件,山顶上的岗哨将点燃烽烟,若两个岗哨所在的山峰之间没有更高的山峰遮挡且两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小...原创 2018-08-25 10:25:58 · 453 阅读 · 0 评论 -
【程序员面试金典】找出缺失的整数
题目描述数组A包含了0到n的所有整数,但其中缺失了一个。对于这个问题,我们设定限制,使得一次操作无法取得数组number里某个整数的完整内容。唯一的可用操作是询问数组中第i个元素的二进制的第j位(最低位为第0位),该操作的时间复杂度为常数,请设计算法,在O(n)的时间内找到这个数。给定一个数组number,即所有剩下的数按从小到大排列的二进制各位的值,如A[0][1]表示剩下的第二个数二进...原创 2018-07-23 09:28:10 · 299 阅读 · 0 评论 -
【程序员面试金典】请编写程序交换一个数的二进制的奇数位和偶数位。
题目描述请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)给定一个int x,请返回交换后的数int。测试样例:10返回:5class Exchange {public: int exchangeOddEven(int x) { // write code here int odd = ((x&0x...原创 2018-07-23 09:21:18 · 400 阅读 · 0 评论 -
【程序员面试金典】编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。
题目描述编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。给定两个整数int A,int B。请返回需要改变的数位个数。测试样例:10,5返回:4class Transform {public: int calcCost(int A, int B) { // write code here int count = 0...原创 2018-07-23 09:18:05 · 679 阅读 · 0 评论 -
【程序员面试金典】有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)
题目描述有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。测试样例:2返回:[1,4]class CloseNumber {public: vector<int> getCloseNumber(int x) { ...原创 2018-07-22 21:26:36 · 1683 阅读 · 0 评论 -
【程序员面试金典】有一个介于0和1之间的实数,类型为double,返回它的二进制表示。
题目描述有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。测试样例:0.625返回:0.101class BinDecimal {public: string pr...原创 2018-07-22 21:26:38 · 706 阅读 · 0 评论 -
【程序员面试金典】有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始。
题目描述有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始。给定两个数int n和int m,同时给定int j和int i,意义如题所述,请返回操作后的数,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。测试样例:1024,19,2,6返回:1100class BinInsert...原创 2018-07-21 09:39:12 · 953 阅读 · 0 评论 -
【程序员面试金典】输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(...原创 2018-07-21 09:35:14 · 1909 阅读 · 0 评论 -
【程序员面试金典】请设计一个算法,求出a和b点的最近公共祖先的编号。
题目描述有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:2,3返回:1其实题目有意把根节点标为1,已经有点简化啦,这个时候node_father ...原创 2018-07-21 09:33:01 · 355 阅读 · 0 评论 -
【程序员面试金典】寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。
题目描述请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。 要寻找中序遍历的某个节点的下一个节点,肯定是要通过中序遍历实现的,题目中明确告诉我们节点的值没有重复,所以只要在中序遍历的过程中...原创 2018-07-21 09:26:26 · 729 阅读 · 0 评论 -
【程序员面试金典】检查一棵二叉树是否为二叉查找树。
题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2018-07-21 09:21:24 · 469 阅读 · 1 评论 -
【程序员面试金典】对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。<方法1>:层次遍历 这个题目的意思就是输出二叉树的某一层的所...原创 2018-07-21 09:18:02 · 884 阅读 · 0 评论 -
【程序员面试金典】对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。class MinimalBST {public: int buildMinimalBST(vector<int> vals) { // write code here ...原创 2018-07-21 09:11:35 · 640 阅读 · 0 评论 -
【程序员面试金典】对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
题目描述对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。给定图中的两个结点的指针DirectedGraphNode* a, DirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。题目分析: 这个题目考察的其实是有向图的遍历,图的遍历分为深度优先遍历和广度优先遍历,深度...原创 2018-07-21 09:04:56 · 2067 阅读 · 0 评论 -
【程序员面试金典】有一个单色屏幕储存在一维数组中,其中数组的每个元素代表连续的8位的像素的值,请实现一个函数,将第x到第y个像素涂上颜色(像素标号从零开始),并尝试尽量使用最快的办法。
题目描述有一个单色屏幕储存在一维数组中,其中数组的每个元素代表连续的8位的像素的值,请实现一个函数,将第x到第y个像素涂上颜色(像素标号从零开始),并尝试尽量使用最快的办法。给定表示屏幕的数组screen(数组中的每个元素代表连续的8个像素,且从左至右的像素分别对应元素的二进制的从低到高位),以及int x,int y,意义如题意所述,保证输入数据合法。请返回涂色后的新的屏幕数组。测试...原创 2018-07-23 09:35:32 · 584 阅读 · 0 评论 -
【程序员面试金典】在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率。(这里的相撞是指存在任意两只蚂蚁会相撞)
题目描述在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率。(这里的相撞是指存在任意两只蚂蚁会相撞)给定一个int n(3<=n<=10000),代表n边形和n只蚂蚁,请返回一个double,为相撞的概率。测试样例:3返回:0.75思路:每个蚂蚁爬行的方向都有两个,即围绕多边形顺时针爬和逆时针爬,因此n个蚂蚁爬行的方...原创 2018-07-23 09:50:07 · 1212 阅读 · 0 评论 -
【程序员面试金典】给定直角坐标系上的两条直线,确定这两条直线会不会相交。
题目描述给定直角坐标系上的两条直线,确定这两条直线会不会相交。线段以斜率和截距的形式给出,即double s1,double s2,double y1,double y2,分别代表直线1和2的斜率(即s1,s2)和截距(即y1,y2),请返回一个bool,代表给定的两条直线是否相交。这里两直线重合也认为相交。测试样例:3.14,3.14,1,2返回:falseclas...原创 2018-07-23 09:53:47 · 856 阅读 · 0 评论 -
【编程测试题】字典序
题目描述给定整数n和m, 将1到n的这n个整数按字典序排列之后, 求其中的第m个数。对于n=11, m=4, 按字典序排列依次为1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 因此第4个数是2. 对于n=200, m=25, 按字典序排列依次为1 10 100 101 102 103 104 105 106 107 108 109 11 110 111 112 113...原创 2018-08-24 10:38:01 · 1075 阅读 · 0 评论 -
【编程测试题】数字和为sum的方法数
题目描述给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000) 第二行为n个正整数A[i](32位整数),以空格隔开。输出描述:输出所求的方案数//...原创 2018-08-21 15:24:48 · 1297 阅读 · 0 评论 -
【编程测试题】LeetCode single-number
Given an array of integers, every element appears twice except for one. Find that single one.Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra...原创 2018-08-28 10:23:52 · 353 阅读 · 0 评论 -
【编程测试题】混合颜料
题目描述你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本...原创 2018-08-23 11:01:24 · 293 阅读 · 0 评论 -
【编程测试题】数列还原
数列还原题目描述牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i < j 且 A[i] < A[j] 的对数,请帮助牛牛计算出,符合这个要求的合法排列的数目。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含两个...原创 2018-08-17 16:29:13 · 398 阅读 · 0 评论 -
【编程测试题】连续最大和
题目描述一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。// 读完题的第一反应是动...原创 2018-08-22 10:32:49 · 417 阅读 · 0 评论 -
【编程测试题】数字游戏
题目描述小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中...原创 2018-08-18 11:18:14 · 547 阅读 · 0 评论 -
【编程测试题】头条校招
题目描述头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队,每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来,在选题之前,我们对题目进行了盲审,并定出了每道题的难度系统。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a,b,c,我们希望这3道题能满足下列条件:a<=b<=cb-a<=10c-b<=10所有...原创 2018-08-15 14:49:07 · 383 阅读 · 0 评论 -
【编程测试题】游戏任务标记
题目描述游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,任务ID范围[1,1024]。请用32个unsigned int类型来记录着1024个任务是否已经完成。初始状态都是未完成。 输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。 输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第...原创 2018-08-13 11:12:04 · 464 阅读 · 0 评论 -
【编程测试题】素数对、不要二、求和
题目描述给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))输入描述:输入包括一个整数n,(3 ≤ n < 1000)输出描述:输出对数#include <iostream>#include <v...原创 2018-08-14 14:29:41 · 389 阅读 · 0 评论 -
【程序员面试金典】20180801
题目描述现有一些随机生成的数字要将其依次传入,请设计一个高效算法,对于每次传入一个数字后,算出当前所有传入数字的中位数。(若传入了偶数个数字则令中位数为第n/2小的数字,n为已传入数字个数)。给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000。测试样例:[1,2,3,4,5,6],6返回:[1,1...原创 2018-08-01 15:40:54 · 662 阅读 · 0 评论 -
【编程测试题】阿里巴巴2019年提前批编程题
光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么? 光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连。光明小学的每个班都有M个学生,所以你要为他们设计出一条恰好经过M条边的路径。 光明小学的小朋友们希望全盘考虑所有的因素,所以你需要把任意两点间经过M条边的最短路径的距离输出出来以供参考。* 你需要设计...转载 2018-08-09 17:08:00 · 680 阅读 · 0 评论 -
【程序员面试金典】请编写一个方法,实现整数的乘法、减法和除法运算(这里的除指整除)。只允许使用加号。
题目描述请编写一个方法,实现整数的乘法、减法和除法运算(这里的除指整除)。只允许使用加号。给定两个正整数int a,int b,同时给定一个int type代表运算的类型,1为求a * b,0为求a / b,-1为求a - b。请返回计算的结果,保证数据合法且结果一定在int范围内。测试样例:1,2,1返回:2class AddSubstitution {publi...原创 2018-07-23 09:59:45 · 2323 阅读 · 0 评论 -
【程序员面试金典】实现一个函数,检查二叉树是否平衡,
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。题目分析:<方法1>: 平衡二叉树是通过左右子树的高度来判断是否为平衡二叉树的,所以我们首先想到的是如何求一个树的高度,求一个树的高度很简单,递归求解,每次...原创 2018-07-21 09:04:54 · 650 阅读 · 0 评论 -
【程序员面试金典】有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。
题目描述有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。给定一个int n,请返回n分有几种表示法。保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。测试样例:6返回:2参考骑着炮弹进城提到的dp方法这里补充一些解释,如有错漏,还请指正。我们用dp[i](i属于1~n ) 表示组合成i元一共有几种...原创 2018-07-26 09:34:00 · 3228 阅读 · 0 评论 -
【程序员面试金典】猫狗收容所
题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。 给定一个操作序列int[][2] ope(C++中为vector<vector<int>>)代表所有事件。若第一个元素为1,则代表有动物进入收容...原创 2018-07-20 10:10:17 · 315 阅读 · 0 评论 -
【程序员面试金典】确定一个字符串的所有字符是否全都不同。
题目描述请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。测试样例:"aeiou"返回:True"BarackObama"返回:Fa...原创 2018-07-19 11:21:42 · 344 阅读 · 0 评论 -
【程序员面试金典】 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )#include <stdio.h>#include <string.h>#include <ctype.h>#include<iostream>#include<sstream>using namespace std;int ma...原创 2018-07-25 09:30:05 · 2395 阅读 · 0 评论 -
【程序员面试金典】三个空汽水瓶可以换一瓶汽水。
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 输入描述...原创 2018-07-25 09:30:02 · 2971 阅读 · 0 评论 -
【程序员面试金典】对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
题目描述对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。测试样例:"(()())",6返回:true测试样例:"()a()()",7返回:false测试样例:"()(()()",7返回:falseclass Parenthesis {publ...原创 2018-07-25 09:29:59 · 2030 阅读 · 0 评论 -
【程序员面试金典】编写一个方法,确定某字符串的所有排列组合。
题目描述编写一个方法,确定某字符串的所有排列组合。给定一个string A和一个int n,代表字符串和其长度,请返回所有该字符串字符的排列,保证字符串长度小于等于11且字符串中字符均为大写英文字符,排列中的字符串按字典序从大到小排序。(不合并重复字符串)测试样例:"ABC"返回:["CBA","CAB","BCA","BAC","ACB","ABC&qu原创 2018-07-24 09:31:46 · 852 阅读 · 0 评论 -
【程序员面试金典】请编写一个方法,返回某集合的所有非空子集。
题目描述请编写一个方法,返回某集合的所有非空子集。给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。测试样例:[123,456,789]返回:{[789,456,123],[789,456],[789,123],[789],[456 123],[456],[12...原创 2018-07-24 09:28:08 · 803 阅读 · 2 评论 -
【程序员面试金典】在数组A[0..n-1]中,有所谓的魔术索引,满足条件A[i]=i。给定一个不下降序列,元素值可能相同,编写一个方法,判断在数组A中是否存在魔术索引。请思考一种复杂度优于o(n)的方
题目描述在数组A[0..n-1]中,有所谓的魔术索引,满足条件A[i]=i。给定一个不下降序列,元素值可能相同,编写一个方法,判断在数组A中是否存在魔术索引。请思考一种复杂度优于o(n)的方法。给定一个int数组A和int n代表数组大小,请返回一个bool,代表是否存在魔术索引。测试样例:[1,1,3,4,5]返回:trueclass MagicIndex {pu...原创 2018-07-24 09:22:50 · 1131 阅读 · 0 评论