18年春招网易笔试题

一共三道题,第三题感觉没意义就不罗列了

  1. 二维坐标系下有很多矩形框,求这些矩形框最大的重叠个数
  2. 1用字符1表示,2用字符12表示,3用字符123表示,…,10用字符12345678910表示,给定m,l,且m<l,问从m到l对应的字符表示的整数有多少个能被3整除

最大矩形重叠个数

我之前遇到过类似的题目,好像是原题,不记得了,我想的方法就是找到最下角的坐标,最上角的坐标,然后遍历由最下角的坐标和最上角的坐标组成的矩形区域,记录每个点上矩形的个数,存储在一个二维数组中,然后遍历这个二维数组的最大值返回即可
这道题并没有AC,只过了40%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public static int getMaxNum(int[]x1,int[]x2,int[]y1,int[]y2){
int res=1;
int minx1=Integer.MAX_VALUE,miny1=Integer.MAX_VALUE;
int maxx2=Integer.MIN_VALUE,maxy2=Integer.MIN_VALUE;
for(int i=0;i<x1.length;i++){
if(x1[i]<minx1)minx1=x1[i];
if(x2[i]>maxx2)maxx2=x2[i];
if(y1[i]<miny1)miny1=y1[i];
if(y2[i]>maxy2)maxy2=y2[i];
}
int[][]num=new int[maxx2-minx1+1][maxy2-miny1+1];
for(int i=minx1;i<=maxx2;i++){
for(int j=miny1;j<=maxy2;j++){
for(int k=0;k<x1.length;k++){
if(x1[k]<i&&y1[k]<j&&x2[k]>i&&y2[k]>j){
num[i-minx1][j-miny1]++;
}
}
}
}
for(int i=0;i<num.length;i++){
for(int j=0;j<num[0].length;j++){
if(num[i][j]>res)res=num[i][j];
}
}
return res;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n;
n=scanner.nextInt();
int[] x1=new int[n];
int[] x2=new int[n];
int[] y1=new int[n];
int[] y2=new int[n];
for(int i=0;i<n;i++)x1[i]=scanner.nextInt();
for(int i=0;i<n;i++)y1[i]=scanner.nextInt();
for(int i=0;i<n;i++)x2[i]=scanner.nextInt();
for(int i=0;i<n;i++)y2[i]=scanner.nextInt();
scanner.close();
System.out.println(getMaxNum(x1,x2,y1,y2));
}

多少个能被3整除

这道题只要理解能被3整除的数的性质,那么可以说是非常简单了
数字a由b与c求和得到,即a=b+c
那么a%3等价于(b%3+c%3)%3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static int getNum(int l,int r){
String s="";
int num=0;
int res=0;
for(int i=1;i<=r;i++){
num=(num+i)%3;
if(i>=l&&num==0)res++;
}
return res;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int l,r;
l=scanner.nextInt();
r=scanner.nextInt();
scanner.close();
System.out.println(getNum(l,r));
}

如果觉得有帮助,给我打赏吧!