2019美团后台开发工程师笔试

凉飕飕~~真的是劝退式笔试呀~

美团的题型有三部分

1.逻辑题20道(看图形找规律,数学题,还有阅读题,很难)

2.技术选择题30道(考了很多指针的,结果c++我真的已经忘得差不多了,后来已经自暴自弃的乱选了)

3.两道编程答题(哎,一道都没做出来)

编程题1.

(这道题一看到图,就立马放弃了,还是没刷图的题目的原因呀,太陌生了)

给定一张包含N个点、N-1条边的无向连通图,节点从1到N编号,每条边的长度均为1。假设你从1号节点出发并打算遍历所有节点,那么总路程至少是多少?
输入
第一行包含一个整数N,1≤N≤100000。
接下来N-1行,每行包含两个整数X和Y,表示X号节点和Y号节点之间有一条边,1≤X,Y≤N。
输出
输出总路程的最小值。

这题也是参考牛客上大佬的,真的思路很值得参考!!自己怎么也不会想到。

作者:WAK
链接:https://www.nowcoder.com/discuss/104554?type=2
来源:牛客网
思路:走完所有节点类似于深度优先搜索,也就是说除了最后一条路径外,别的路径都经历了正着走,再返回
的过程,也就是两遍,设最后一条路径为x,总分支数为n-1,总路径=2*(n-1-x)+x=2*n-2-x,当x最大时

总路径最小,所以转化为求多叉树的深度。

import java.util.Scanner;
public class Meituan01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int[] arr=new int[n+1];
		int depth=0;
		//记录每个结点的深度
		for(int i=0;idepth?arr[j]:depth;
		}
		System.out.println(2*n-2-depth);
		
		

	}

}



第二题
小明拿到了一个数列a1 , a2 , ... an ,小明想知道存在多少个区间[l,r]同时满足下列两个条件:
1、r-l+1=k;
2、在a l , a l+1,...ar中,存在一个数至少出现了 t 次。
输出满足条件的区间个数。

参考牛客上大佬的答案的,想明白思路的,之前也想到用集合,但是没有想到hashmap,哎。

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Meituan02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		
			int n=in.nextInt();
			int k=in.nextInt();
			int t=in.nextInt();
			int[] arr=new int[n];
			for(int i=0;i map=new HashMap<>();
			for(int i=0;i=k){
					Integer integer=map.get(arr[i-k]);
					map.put(arr[i-k], integer);
					
				}
				Integer orDefault=map.getOrDefault(arr[i], 0);
				map.put(arr[i], orDefault+1);
				if(i>=k-1){
					int count=0;
					for(int key : map.keySet()){
						count=count>map.get(key)?count:map.get(key);
					}
					if(count>=t){
						res++;
					}
				}
			}
			System.out.println(res);
			

	}

}

 

你可能感兴趣的:(笔试记录)