美团点评2018笔试 -- JAVA 进阶

本文解析了美团点评2018年招聘提前批的两道编程题,第一题涉及寻找序列中和为特定值倍数的最长子序列;第二题探讨如何分配试卷避免出现缺陷的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚参加了美团点评2018招聘  提前批的笔试

有两个编程题 第一题具体的题目记不太清了 不过大致的意思就是输入一个序列长度N  并依次填充序列  最后给定一个值K,在序列的任意长度子序列中 只要有各项和是K的倍数,则输出子序列的长度。如输入  5(长度)   { 1,2,3,4,5  } (序列P)   5(K)     符合题意的子序列有:{ 5 }、{ 1,2,3,4 }、{ 2,3},{ 1,2,3,4,5 }   则输出长度为5。

代码提交之后通过率为83%,找了半天也不知道哪里有问题。。。。。。。。。。。。。

第二题的题目非常长  不过我理解的是  只要满足各个组的和的二倍大于最大的组的组员人数  即可 
老师不想自己改试卷,于是让大家互相改试卷。
把全班同学分为k组,每组有s(k)个同学,
老师先选择一个组i,将这个组的所有试卷s(i)份都收上来放在讲台上
然后再选择一个组j,从讲台上拿s(j)份试卷随机分给j组的同学,然后把j组的所有试卷收上来,放在讲台上试卷的最下方
……重复上述过程,
最后把剩余的试卷随机分给i组的s(i)个同学。
但是这样分配试卷是有缺陷的,比如:
1.有可能出现讲台上试卷不够的的情况
2.可能出现有的同学改到自己试卷的情况
题目给出k个组每个组同学的数量,请问是否可以找到一种策略使得不会出现缺陷
如果可以找到,输出"Yes"
否则输出"No"

题1:

import java.util.Scanner;

public class Main{
	private static int getMaxNum(int[] num, int k) {
		// TODO Auto-generated method stub
		int len =num.length;
		int[] result = new int[len];
		int temsum=0,maxsum=0;
		if(len==1&&num[0]%k==0){
			return 1;
		}
		for(int i=0;i<len;i++){
			temsum =0;
			for(int m=0;m<len;m++){
				result[m] =num[m];
			}
			if(num[i]%k==0){
				temsum = 1;
			}
			for(int j=i+1;j<len;j++){
				result[j]+=result[j-1];
				if(result[j]%k==0){
					temsum =j-i+1;
					if(temsum>=maxsum){
						maxsum =temsum;
					}
				}
			}
		}
		return maxsum;
	}
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		while(sc.hasNext()){
			int n = sc.nextInt();
			int[] num = new int[n];
			for(int i=0;i<n;i++){
				num[i] = sc.nextInt();
			}
			int k = sc.nextInt();
			System.out.println(getMaxNum(num,k));
		}
	}
}

题2:

import java.util.Scanner;

public class Main{

	private static void getResult(int[] stu) {
		// TODO Auto-generated method stub
		int len =stu.length;
		if(len ==0||len==1){
			System.out.println("NO");
		}
		int temmax= stu[0],sum=stu[0];
		for(int i=1;i<len;i++){
			if(stu[i]>temmax){   //直接找出最大的那个组  并对所有组求和
				temmax = stu[i];
			}
			sum+=stu[i];
		}
		if(sum>=2*temmax){    //判断最大组是否小于其他各组的和
			System.out.println("YES");
		}else{
			System.out.println("NO");
		}
	}
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		while(sc.hasNext()){
			int n =sc.nextInt();
			int[] stu = new int[n];
			for(int i=0;i<n;i++){
				stu[i] =sc.nextInt();
			}
			getResult(stu);
		}
	}
}










                
<think>嗯,用户是一位二本准大二学生,目标是大厂就业,目前只学了C++,在纠结是否转Java/Python。这个问题很典型,需要结合技术趋势和就业现实来分析。 用户的核心诉求其实是"如何用有限时间最大化进大厂概率"。从引用[1]那位转Java成功的案例看,语言选择确实会影响就业机会。不过引用[3]提到C++转Python需要思维转换,说明语言切换有成本。 先看客观数据:大厂后端用Java/Go居多,客户端和游戏用C++,算法岗用Python。但用户才大二,关键不是选"终极语言",而是建立编程思维。引用[4]的C++书单恰恰说明,C++能打下扎实的内存/系统基础,这对后续学Java的JVM或Python解释器都很有帮助。 用户可能担心二本学历吃亏。其实大厂更看重基础能力,就像引用[2]警告的,别陷入"速成教程陷阱"。建议用户保持C++主线,同时用Python刷算法题——这样既延续现有基础,又覆盖大厂笔试需求。等数据结构/操作系统等核心课学完,大三再根据实习方向决定专攻Java还是C++。 特别要注意的是,用户提到"只学了C++",可能还没接触项目。比起换语言,不如用C++做个小项目,比如参考引用[4]的书单实现简易STL容器,这比泛泛学语法更能打动面试官。</think>基于你的目标和现状,我会从就业市场、学习路径和行动策略三个方面给出建议,最后提供具体的学习路线图: ### 一、核心决策建议 **优先选择:C++为主 + Java/Python为辅** 1. **继续深耕C++**(核心优势方向) - 大厂需求领域:游戏引擎(腾讯网易)、基础设施(数据库/分布式系统)、嵌入式(华为/大疆) - 薪资竞争力:资深C++工程师均价高于Java 15%-20%[^1] - 你的优势:已有基础,避免从零切换的时间成本 2. **同步补充Java**(就业广度保障) - 后端开发岗位量是C++的3倍以上(阿里/美团/京东等主流电商平台)[^2] - 学习建议:每周投入10小时,大三前掌握Spring Boot基础开发 3. **必学Python**(技术能力扩展) - 应用场景:算法题刷题(LeetCode)、数据分析脚本、AI方向探索 - 学习目标:3个月达到能写自动化脚本水平 > 📊 语言需求对比(2023大厂校招岗位) > | 语言 | 岗位占比 | 主要领域 | 二本机会窗口 | > |---------|----------|--------------------|--------------| > | Java | 45% | 电商/金融后端 | ★★★☆ | > | C++ | 25% | 基础设施/游戏/嵌入 | ★★☆☆ | > | Python | 20% | 数据分析/AI | ★☆☆☆ | > | Go | 10% | 云原生/高并发 | ★★☆☆ | ### 二、关键能力补强策略 1. **突破学历瓶颈的3张王牌**: - 竞赛证书:ACM-ICPC区域赛奖/蓝桥杯国赛(C++优势赛道) - 硬核项目: - 用C++实现简易分布式存储系统(参考LevelDB源码) - 基于OpenGL的3D渲染引擎(GitHub附技术文档)[^4] - 技术博客:深度解析C++内存管理/并发编程(产出3篇以上高质量文章) 2. **实习进阶路线**: ```mermaid timeline 2023大三上 : 参加计算机竞赛 + 做开源贡献 2024大三下 : 争取嵌入式/游戏公司实习(C++方向) 2025大四上 : 冲刺大厂基础设施岗实习(如腾讯TEG) ``` ### 三、具体学习路线图 **大二阶段(2023-2024)** 1. C++深度进阶- 必读:《Effective C++》《深度探索C++对象模型》 - 项目:实现STL容器(vector/map)+ 线程池框架 2. Java基础: - 完成Java核心技术卷I + 设计模式 - 用Spring Boot开发带鉴权的API服务 3. Python工具化: - 用Pandas做数据分析 + Requests爬取岗位信息 **大三阶段(2024-2025)** 1. 操作系统实战: - 基于MIT xv6实现进程调度模块 - 参考《Linux内核设计与实现》[^4] 2. 架构能力: - 用C++11写高并发网络服务器(epoll+线程池) - 学习微服务架构(对比gRPC和Spring Cloud) > 💡 关键提示:大厂更关注底层能力(数据结构和算法、操作系统、网络),语言只是工具。蚂蚁金服首席架构师曾分享:“我用C++写Java虚拟机,用Java写区块链引擎,语言从不是障碍。” ### 四、风险控制建议 如果出现以下情况建议转Java为主: 1. 大二结束仍无法独立实现C++智能指针 2. 所在城市无C++相关实习机会(如非技术中心城市) 3. 对系统底层开发明显抵触 **行动清单**: ```markdown ✅ 本周: - 注册LeetCode用Python刷题(从数组操作开始) - 精读《Effective C++》条款1-10 ✅ 本月: - 用C++11实现线程安全队列 - 完成Java学生管理系统(MySQL+Spring Boot) ✅ 本季: - 参加蓝桥杯C++组并进入省赛 - 在GitHub建立技术博客仓库 ``` 大厂更看重扎实的计算机基础(数据结构、算法、操作系统、网络)而非特定语言。建议用C++打牢基础,同步拓展Java/Python,通过高质量项目和竞赛弥补学历短板[^1][^4]。方向选择比努力更重要,但坚持比选择更关键。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值