牛客网-2018校招真题-安置路灯 题目:题目描述小Q正在给一条长度为n的道路设计路灯安置方案。为了让问题更简单,小Q把道路视为n个方格,需要照亮的地方用’.'表示, 不需要照亮的障碍物格子用’X’表示。小Q现在要在道路上设置一些路灯, 对于安置在pos位置的路灯, 这盏路灯可以照亮pos - 1, pos, pos + 1这三个位置。小Q希望能安置尽量少的路灯照亮所有’.'区域, 希望你能帮他计算一下最少需要多少盏路灯。...
牛客网-2018校招真题-疯狂队列 题目:题目描述小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和。由于按照身高顺序排列的队列的疯狂值是最小的,他们当然决定按照疯狂值最大的顺序来进行列队。现在给出n个学生的身...
牛客网-2018校招真题-堆棋子 题目:题目描述小易将n个棋子摆放在一张无限大的棋盘上。第i个棋子放在第x[i]行y[i]列。同一个格子允许放置多个棋子。每一次操作小易可以把一个棋子拿起并将其移动到原格子的上、下、左、右的任意一个格子中。小易想知道要让棋盘上出现有一个格子中至少有i(1 ≤ i ≤ n)个棋子所需要的最少操作次数.输入描述:输入包括三行,第一行一个整数n(1 ≤ n ≤ 50),表示棋子的个数第二行为n个...
牛客网-2018校招真题-独立的小易 题目:题目描述小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间。一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付x元的房屋租金。当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售卖p元。小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算一下他最多能独立生活多少天。输入描述:输入包括一行,四个整数...
牛客网-2018校招真题-操作序列 题目:题目描述小易有一个长度为n的整数序列,a_1,…,a_n。然后考虑在一个空序列b上进行n次以下操作:1、将a_i放入b序列的末尾2、逆置b序列小易需要你计算输出操作n次之后的b序列。输入描述:输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。第二行包括n个整数a_i(1 ≤ a_i ≤ 10^9),即序列a中的每个整数,以空格分割。输出描述:...
牛客网-2018校招真题-交错01串 题目: 题目描述如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: “1”,“10101”,"0101010"都是交错01串。小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。输入描述:输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只...
牛客网-2018校招真题-等差数列 题目:题目描述如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列输入描述:输入...
牛客网-2018校招真题-六一儿童节 题目: 六一儿童节,老师带了很多好吃的巧克力到幼儿园。每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]>=h[i]),他才会上去表演节目。老师的目标是将巧克力分发给孩子们,使得最多的小孩上台表演。可以保证每个w[i]> 0且不能将多块巧克力分给一个孩子或将一块分给多个孩子。思路: 要使得最多的孩子上台表演,就需要分别将h[i]和w[j]从...
牛客网-2018校招真题-大整数相乘 题目: 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。思路: 错位相乘并相加。#include<iostream>#include<string>#include<vector>using namespace std;string mul(string num1, string num2){ s...
牛客网-2018校招真题-最大乘积 题目: 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)思路: 不论给定的数组是什么,最大的乘积只有三种情况 1.三个最大的数的乘积(都是正数);2。三个最小的数的乘积(都是负数);3.最小的两个负数和最大正数的乘积(正负数都有)。选出给定数组中的最大的三个数和最小的三个数即可。#include<iostre...
牛客网-剑指office-机器人的运动范围 题目: 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路: 和上道题类似。首先写一个函数计算一个数...
牛客网-剑指office-矩阵中的路径 题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串...
牛客网-剑指office-滑动窗口的最大值 **题目:**给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2...
牛客网-剑指office-数据流中的中位数 **题目:**如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。**思路:**首先要理解STL中heap(堆)的用法。参考https://blog.csdn.net/...
牛客网-剑指office-二叉搜索树的第K个节点 **题目:**给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。**思路:**中序遍历二叉树,遍历的过程中加入一个计数器,当到达第k个时,输出即可。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *...
牛客网-剑指office-序列化二叉树 **题目:**请实现两个函数,分别用来序列化和反序列化二叉树**思路:**首先要理解序列化和反序列化的意思。序列化:二叉树被记录成文件的过程叫作二叉树的序列化反序列化: 通过文件内容重建原来的二叉树过程叫做二叉树反序列化前序遍历二叉树,将结果存入vector向量中,当遇到节点Wie空的时候,加入特殊符号‘#’,并且退出递归。然后进行类型转换。然后进行反序列化,先进行类型转换,然后递归构造...
牛客网-剑指office-把二叉树打印成多行 **题目:**从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。**思路:**二叉树的层次遍历。利用两个队列将每行的节点分隔开来存储即可。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...
牛客网-剑指office-按之字形顺序打印二叉树 **题目:**请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。**思路:**利用两个栈隔行存储二叉树的节点。一个栈从左往右依次存储一行的节点,另外一个栈从右往左依次存储下一行的节点即可。/*struct TreeNode { int val; struct TreeNode *le...
牛客网-剑指office-对称二叉树 题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:我们只需要递归比较 左子树的左子树与右子树的右子树 左子树的右子树 与 右子树的左子树 是否相等即可。/*struct TreeNode { int val; struct TreeNode *left; struct Tree...
牛客网-剑指office-二叉树的下一个节点 **题目:**给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。**思路:**当前节点的下一个节点分为两种情况。(1)如果一个节点有右子树,那么该节点的下一个节点就是它的右子树中的最左的节点。(2)如果该节点没有右子树,我们就需要向上遍历,直到找到当前节点为他父节点的左节点,那么下一个节点就是找到的这个父节点...