面试笔试题
li563868273
个人主页:lizhao.pw
展开
-
平均年龄-美团笔试
已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x>0&&x<1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。 从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(结果向上取整)。 输入:输入W Y x N 输出:平均年龄。思路:这道题比较简单,利用数学思维做,时间复杂度为O(n),空间复杂度为O(1),原创 2016-04-13 11:14:06 · 1100 阅读 · 0 评论 -
动态规划-百度-罪犯转移
C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式? 输入描述:第一行数据三个整数:n,t,c(1≤n≤2e5,0≤t≤1e9,1≤c≤n),第二行按入狱时间给出每个犯人的罪行值ai(0≤ai≤1e9)。输入例子: 3 100 2原创 2016-04-13 12:54:35 · 890 阅读 · 0 评论 -
最长公共子串-不建立dp数组(空间复杂度为O(1))
题目:给定两个字符串str1,str2,返回两个子字符串的最长公共子串。例: 输入:str1=”1AB2345CD” str2=”12345EF”,返回”2345”。 这里我不仅不使用dp,并且还要返回路径。思路:如果我们使用经典动态规划的方法可以做到时间复杂度为O(MXN),额外空间复杂度为O(MXN),经过优化之后的实现可以把额外空间复杂度从O(MXN)降至O(1)。 解法一:动态规划表d原创 2016-04-09 16:13:19 · 785 阅读 · 2 评论 -
动态规划-美团笔试题-拜访
题目:现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。 给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。 例:原创 2016-04-10 15:25:52 · 1065 阅读 · 0 评论 -
贪心-百度笔试-裁减网格纸
题目:度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。 输入描述: 第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,yi<=1e9)表原创 2016-04-14 14:23:03 · 665 阅读 · 0 评论 -
钓鱼比赛-百度笔试
题目:ss请cc来家里钓鱼,鱼塘可划分为n*m的格子,每个格子每分钟有不同的概率钓上鱼,cc一直在坐标(x,y)的格子钓鱼,而ss每分钟随机钓一个格子。问t分钟后他们谁至少钓到一条鱼的概率大?为多少? 输入描述:第一行五个整数n,m,x,y,t(1≤n,m,t≤1000,1≤x≤n,1≤y≤m); 接下来为一个n*m的矩阵,每行m个一位小数,共n行,第i行第j个数代表坐标为(i,j)的格子钓到鱼原创 2016-04-14 15:12:10 · 1340 阅读 · 0 评论 -
动态规划-美团笔试-最大直方图
题目: 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如, * 对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。 给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。 测试样例:[2,7,9,4,1],5 返回:14思路:根据动态规划的思路原创 2016-04-11 13:54:42 · 2027 阅读 · 1 评论 -
海量数据面试题整理(一)
1、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 第一步:s 遍历文件a,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件(记为a0,a1转载 2016-04-14 21:42:27 · 376 阅读 · 0 评论 -
动态规划-百度-蘑菇阵
现在有两个好友A和B,住在一片长有蘑菇的由n*m个方格组成的草地,A在(1,1),B在(n,m)。现在A想要拜访B,由于她只想去B的家,所以每次她只会走(i,j+1)或(i+1,j)这样的路线,在草地上有k个蘑菇种在格子里(多个蘑菇可能在同一方格),问:A如果每一步随机选择的话(若她在边界上,则只有一种选择),那么她不碰到蘑菇走到B的家的概率是多少?输入描述:第一行N,M,K(2 ≤ N,M ≤ 2原创 2016-04-15 11:42:37 · 519 阅读 · 0 评论 -
每日一题之动归-换钱的最少次数(一)
题目: 给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。 举个例子 arr[5,2,3] ,aim=20 4张5元可以组成20,并且是最小的,所以返回4 arr[5,2,3],aim=0。 不用任何货币就可以组成0元,这里返回0. arr[5,原创 2016-05-10 17:15:01 · 1776 阅读 · 1 评论 -
华为-删数-约瑟夫环问题-不利用额外空间
题目:有一个数组a[N]顺序存放0-N,要求没隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。 输入描述:每组数据为一行一个整数n(小于等于1000),为数组成员数,如100,则对a[999]进行计原创 2016-04-17 13:31:40 · 923 阅读 · 0 评论 -
二叉树节点间的最大距离
题目:从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A 到B的距离。 比如,上图所示的二叉树,节点4和节点2的距离2,节点5和节点6的距离为5。给定一颗二叉树的头结点head求整棵树上节点间的最大距离。要求:如果二叉树的节点为N,时间复杂度要求为O(N). 思路: 二叉树中最大距离只可能来自以下三种情况: 1.h的左子树上的最大距离原创 2016-04-30 10:33:03 · 2265 阅读 · 0 评论 -
每日一题之动归-换钱的最少次数(二)
题目:上一道题是给定一个钱的数组,可以使用任意张数。接下来改变一下题目:给定数组arr,arr中所有的值都是正数。每个值仅代表一张钱的面值,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。例子: arr=[5,2,3],aim=20。 这里5+2+3=10最大才是10,所以不能组成,返回-1。 arr=[5,2,5,3],aim=10。 这里有两种可能一种是5+5 ,还有一种是原创 2016-05-15 11:35:54 · 468 阅读 · 0 评论 -
动态规划-数组中求最长等差数列的长度
题目:给定一个数组求出数组最长等差数列的长度。 举例:3,8,4,5,6,2 输出:5。 思路:利用区间dp来做,dp[i][diff]的意思是 intAr[0]到intAr[i],等差为diff的等差长度。在求dp长度的时候利用一个ans变量保存最大即可。 dp的求法: 有diff=intAr[i]-intAr[j](j<i) dp[i][diff]=dp[j][diff]。 细节处原创 2016-04-24 19:28:33 · 4555 阅读 · 0 评论 -
动态规划-求最长递增子序列
题目:给出一段数组,比如[1,3,5,2,4,6,7,8],得到的最长为1,2,4,6,7,8。 思路:利用dp数组来解决这个问题,dp[i]表示0…i之间最长的子序列的长度。 dp的求法如果a[i]>a[j],dp[i]=Math.max(dp[i],dp[j]+1);首先求出dp的代码如下:private static int[] getdp(int[] arr){ int[原创 2016-04-25 22:07:53 · 518 阅读 · 0 评论 -
HTTP请求报文和响应报文
请求报文http请求报文可以分成三个部分: 1.请求行 2.请求头 3.请求体请求行请求行分为三部分: 1。请求方法:这里的请求方法指的是http请求方法(get,post,delete,put)等 2。请求URL: 这里是我们需要访问的URL地址 3。HTTP协议及版本:我们这里使用的是HTTP 1.1协议。1.1和1.0的区别也是常考的,区别最主要是1.0的长连接不是默认开启。请求头原创 2016-04-08 14:14:02 · 1048 阅读 · 0 评论 -
动态规划-美团笔试-字符串计数-恶心的dp
题目:求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。 输入描述:每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)。 输入例子: ab ce 1 2 输出:56思路:看见这个标签是动态规划我第一反应就是找dp表关系,但是找了半天嗯是没有进展,问了一个大神大神给我原创 2016-04-12 12:55:20 · 1418 阅读 · 0 评论 -
小范围排序
已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。测试样例:[2,1,4,3,6,5,8,7,10,9],10,2返回:[1,2,3,4,5,6,7,8,9,10]具体解法:使用堆排序原创 2016-01-11 10:43:14 · 267 阅读 · 0 评论 -
最短排序子数组
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:2public class Subsequence { public static int shortestSu原创 2016-01-11 10:45:15 · 612 阅读 · 0 评论 -
相邻两数最大差值
有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。测试样例:[1,2,5,4,6],5返回:2基于桶排序的思想完成,不考虑两个相同的桶内的差值,只考虑该桶的最小值减去上一个桶的最大值,最大的就是最大值。public class Gap { //重点在O(n)上面原创 2016-01-11 10:52:30 · 1546 阅读 · 0 评论 -
滑动窗口联系
有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 以数组为[4,3,5,4,3,3,6,7],w=3为例。因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5。第四个窗口[4,3,3]的最大值为4。第五原创 2016-02-04 15:12:51 · 551 阅读 · 0 评论 -
一种怪异的节点删除方式(阿里电面)
题目:链表节点值类型为int型,给定一个链表中的节点node,但不给定整个链表的头结点,如何删除Node? 这是我内推阿里的时候一道面试题。 解答:本题其实比较简单。 举例:链表1-2-3-null,只知道要删除节点2,而不知道头结点。 只需要把2节点变为3,然后删除3即可。 问题一:这样的删除方式无法删除最后一个节点。必须告诉头结点遍历一次才能删除最后一个节点。 问题二:这种删除方式在原创 2016-04-04 20:52:34 · 627 阅读 · 0 评论 -
将单向链表按某值划分成左边小,中间相等,右边大
题目:给定一个单向链表的头结点head,节点的值类型是整型,再给定一个整数privot。实现一个调整链表的函数,将链表调整为左部分都是值小于privot的节点,中间部分都是值等于privot的节点,右部分都是大于privot的节点。 例如:链表9-0-4-5-1,pivot=3。 调整后是1-0-4-9-5,也可以是0-1-9-5-4。 解法1:我们可以利用数组额外空间来实现: 1。先遍历一原创 2016-04-04 21:23:42 · 1103 阅读 · 0 评论 -
复制含有随机指针节点的链表
题目: 一种特殊的链表节点类描述如下:class Node{ public int value; public Node next; public Node rand; public Node(int data){ this.value=data; }}Node类中的value是节点值,next指针和正常链表中next指针的意义一样,ran原创 2016-04-05 13:56:01 · 719 阅读 · 0 评论 -
小米笔试-懂二进制
题目:世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入:1999 2299 输出:7思路判断有多少位不同,我们可以使用异或,把两个数异或之后得到的数,不相同的位就是1。接下来我们只需要统计异或之后的数字有多少位具体代码实现:public int countBitDiff(int m, int n) { i原创 2016-04-05 21:57:42 · 873 阅读 · 0 评论 -
小米笔试-股票最大收益(动态规划)
题目: 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2原创 2016-04-06 12:45:23 · 5023 阅读 · 0 评论 -
腾讯笔试-找矩阵路径最大值
题目:给定一个矩阵,矩阵每个点都有自己的值,现在求从左上点到右下点的最大值。 使用dp动态规划,找出每个点的最大值即可:class mydp{ public int value; public String path=""; public mydp(int value,String path) { this.value = value; thi原创 2016-04-06 13:46:00 · 1485 阅读 · 0 评论 -
去哪儿-首个重复字符
题目: 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。 测试样例: “qywyer23tdd”,11 返回:y 思路:我们这里使用hash表的方法来做这个问题,这里由于是字符可以直接使用数组代替我们的Hash表,具体做法遍历一次字符串数组,在j原创 2016-04-07 16:52:49 · 847 阅读 · 0 评论 -
Trie树
在我们海量数据处理中使用Trie树。 原理是使用字符串的公共前缀来减少时间开销,即空间换时间。优点:最大限度地减少无谓的字符串比较,查询效率比散列表高。典型应用用于统计和排序大量字符串,所以警察被搜索引擎系统用于文本词频统计。 Trie树一般有3个基本特性 1.根结点不包含字符,除根节点外每一个结点都只包含一个字符。 2.从根节点到某一节点,路径上经过的字符连接起来,为该结点原创 2016-03-26 15:17:28 · 305 阅读 · 0 评论 -
去哪儿编程题-寻找Coder
题目: 请设计一个高效算法,再给定的字符串数组中,找到包含”Coder”的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照”Coder”出现的次数递减排列,若两个串中”Coder”出现的次数相同,则保持他们在原数组中的位置关系。 给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串的长度小于等于200。同时保证一定存在包含coder的原创 2016-04-08 10:29:54 · 866 阅读 · 0 评论 -
16年腾讯春招--求最长回文子序列长度
题目:求最长回文子序列长度,子序列可不连续。 给一个字符串,找出它的最长的回文子序列的长度。例如,如果给定的序列是“BBABCBCAB“,则输出应该是7,“BABCBAB”是在它的最长回文子序列。 “BBBBB”和“BBCBB”也都是该字符串的回文子序列,但不是最长的。思路:动态规划。 dp[i][j]表示字符串从i到j区间的最长回文子序列长度。 如果str[i]与str[j]相同,则d转载 2016-04-08 10:39:54 · 394 阅读 · 0 评论 -
动态规划-最短排序
题目: 对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。 给定一个整数数组A及它的大小n,请返回最短子数组的长度。 测试样例: [1,5,3,4,2,6,7],7 结果:4 思路:在O(n)的时间复杂度中可以完成这道题。当然也有利用快排一次然后比较两个不同的个数来求长度。如果使用快排时间复杂度是O(nlogn)。对于O(n)的解法,举个例子[1,5,3,4,2,6,7原创 2016-05-03 17:17:35 · 1707 阅读 · 2 评论