美团2016研发工程师在线编程题及答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

有一个长为n的数组A,求满足0≤a≤bn的A[b]-A[a]的最大值。给定数组A及它的大小n,请返回最大差值。测试样例:[10,5],2返回:0123456789101112131415161718importjava.util.*;publicclassLongestDistance{publicintgetDis(int[]A,intn)intdis=0;if(n1){intmin=A[0];for(inti=1;in;i++){if(A[i]-mindis){dis=A[i]-min;}if(minA[i]){min=A[i];}}}returndis;}19}在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。给定两个数组A和f,分别为初始棋盘和翻转位置。其中翻转位置共有3个。请返回翻转后的棋盘。测试样例:[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]返回:[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]123456789101112131415publicstaticint[][]flipChess(int[][]A,int[][]f){//writecodeherefor(inti=0;if.length;i++){introw=f[i][0]-1;intcol=f[i][1]-1;if(row-1=0){A[row-1][col]=(A[row-1][col]==0)?1:0;}if(row+1=3){A[row+1][col]=(A[row+1][col])==0?1:0;}if(col-1=0){161718192021222324A[row][col-1]=(A[row][col-1])==0?1:0;}if(col+1=3){A[row][col+1]=(A[row][col+1])==0?1:0;}}returnA;}现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。测试样例:[[0,1,0],[2,0,0]],2,3返回:2123456importjava.util.*;publicclassVisit{publicintcountPath(int[][]map,intn,intm){//writecodehereintx1=-1,y1=-1;//经理的坐标7891011121314151617181920212223242526272829303132intx2=-1,y2=-1;//商家的坐标for(inti=0;in;i++){for(intj=0;jm;j++){if(map[i][j]==1){x1=j;y1=i;}elseif(map[i][j]==2){x2=j;y2=i;}}}intxto=x1x2?-1:1;//根据经理和商家的方向判断向左还是向右走intyto=y1y2?-1:1;//向上还是向下//动态规划的思想map[y][x]记录着经理到x,y点最多的路程数for(inty=y1;y!=(y2+yto);y+=yto){for(intx=x1;x!=(x2+xto);x+=xto){if(y==y1||x==x1){map[y][x]=1;continue;}map[y][x]=map[y-yto][x]+map[y][x-xto];}}returnmap[y2][x2];}33}有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。测试样例:[2,7,9,4,1],5返回:14123456789101112131415inti,j,L1,L2;intmax=0;for(i=0;in;i++){L1=0;L2=0;for(j=i;jn;j++){if(A[j]=A[i])L1++;elsebreak;}for(j=i-1;j=0;--j){if(A[j]=A[i])L2++;elsebreak;161718192021}area=(L1+L2)*A[i];if(areamax)max=area;}//printf(maxarea:%d\n,max);returnmax;求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod1000007。1234567891011121314151617#includeiostream#includestring#includevector#includemath.husingnamespacestd;intmain(){//根据题中给出的例子,这个字符串只包含小写字母,不然答案就不应该是56了strings1,s2;intlen1,len2;while(cins1s2len1len2){//只包含小写字母的字符串可以看成26进制的数制//将s1和s2补长到len2长度s1.append(len2-s1.size(),'a');s2.append(len2-s2.size(),(char)('z'+1));vectorintarray;for(inti=0;ilen2;i++){18192021222324252627282930array.push_back(s2[i]-s1[i]);}intresult=0;for(inti=len1;i=len2;i++){for(intk=0;ki;k++){result+=array[k]*pow(26,i-1-k);}}//所有字符串最后都不包含是s2自身,所以最后要减1;coutresult-1endl;}return0;}已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x0&&x1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(结果向上取整)。12345678#includecstdio#includestring#includecstdlib#includecmath#includevector#includeiostream#includealgorithm#includequeue910111213141516171819202122232425262728293031323334usingnamespacestd;intw,n;doubley,x;intmain(){freopen(in.txt,r,stdin);while(scanf(%d%lf%lf%d,&w,&y,&x,&n)!=EOF){doublenewPerson=w*x;//这里必须用doubledoubleaveAge=y;for(inti=0;in;i++){//老员工多了一岁,新员工总是21doubletotalAge=(w-newPerson)*(aveAge+1)+newPerson*21;aveAge=totalAge/w;}intage=ceil(aveAge);//向上取整printf(%d\n,age);}return0;}

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功