微软2022暑期实习笔试

1.求完成任务的最小天数
描述;给出一个一维任务数组A,数组内容是任务的紧急程度,另有一个整数M。一天可以完成多个任务,每个任务必须按顺序完成,一天内完成的任意两个任务的之间紧急程度差值不能大于M,求完成所有任务的最小天数。
例如:A=[1,12,10,4,5,2]  M=2,答案是4
int solution(vector<int>&nums,int M){
	int ans = 1;
	int Max=nums[0], Min=nums[0];//维护当前一天里已完成任务的最大最小紧急程度
	for (int i = 1; i < nums.size(); i++){
		if(nums[i]<Max-M||nums[i]>Min+M)//该任务不符合加入当前天的要求
		{
			++ans;
			Max = nums[i];
			Min = nums[i];
		}
		else{//符合条件  但是要更新区间值
			Max = max(Max, nums[i]);
			Min = min(Min, nums[i]);
		}
	}
	return ans;
}


2.给出两个长度相同的字符串,求两个字符串中相“匹配”的字符子串个数,“匹配”是指两个子串在原字符串中起点相同,且两个字符子串长度一致,各字符出现次数一致(同一字符串内部字符不同排序构成的字符串)
例如:s="dBacaAA" ,t="caBdaaA",答案是5
其中 "dBac"与"caBd"匹配(子串起始位置:0)
"dBaca"与"caBda"匹配(子串起始位置:0
"Ba"和"aB"匹配(子串起始位置:2
"a"与"a"匹配(子串起始位置:4
"A"与"A"匹配(子串起始位置:6

3.给出一个一维数组,数组内容是坐标,代表点在横轴上的位置,给出一整数M,求一最大点集,集合内任意点之间横轴距离差都是M的倍数。(特别标注需考虑运行效率
数组元素的范围是(-1000000000,1000000000),点的个数范围是(1,1000000000)
题解:用map,定义一个map<int,vector<int>>的map
int solution(vector<int> &A, int M) {

	// write your code in C++14 (g++ 6.2.0)
	sort(A.begin(), A.end());
	map<int, vector<int>> mp;
	int ans=1;
	for (int i = 0; i < A.size(); i++){
		auto it = mp.begin();
		for (; it != mp.end(); it++){
			if ((A[i] - it->first)%M == 0){
				it->second.push_back(A[i]);
				ans = max(ans, (int)it->second.size());
				break;
			}
		}
		if (it == mp.end())
		{
			mp[A[i]].push_back(A[i]);
		}
	}
	return ans;
}

吃饭的时候想了下是可以实现O(n)的算法,集合里的点其实就是对M同余的,直接A[i] + M) % M当key,A[i]放入到vector<int>记录下来就行
int solution(vector<int> &A, int M) {
	map<int, vector<int>> mp;
	int ans=1;
	for (int i = 0; i < A.size(); i++){
		mp[(A[i]%M)+M].push_back(A[i]);
		ans = max(ans, (int)mp[(A[i] + M) % M].size());
	}
	return ans;
}



#笔试题目##微软#
全部评论
第三题:(A[i]+M)%M是不对的,会取到负数。应该是 (A[i]%M+M)%M
5 回复 分享
发布于 2022-02-27 00:42
感谢分享!第三题map的值应该存点的数量就行了
2 回复 分享
发布于 2022-02-26 19:30
题目是中文吗
1 回复 分享
发布于 2022-02-27 00:56
理想汽车春季招聘,车企顶级待遇,内部专属内推链接(内推码已自动填好),可私信加vx好友全程跟进: https://app.mokahr.com/m/campus_apply/chehejia/40949?recommendCode=DSSCgruY#/jobs
1 回复 分享
发布于 2022-02-28 22:52
感谢分享!想请教一下第二题有没有不暴力的做法呢
点赞 回复 分享
发布于 2022-02-26 22:33
请问第一题每个任务必须按顺序完成,意思是按照数组A的输入顺序吗?所以是(1),(12,10),(4,5),(2) 这样4天完成?
点赞 回复 分享
发布于 2022-02-27 16:36
歪个楼,三道题只ac了一道还有希望进面试吗qaq
点赞 回复 分享
发布于 2022-02-28 13:30
请问做完笔试会有分数吗?
点赞 回复 分享
发布于 2022-02-28 20:16
要ac几个能进面呢?
点赞 回复 分享
发布于 2022-03-12 17:25

相关推荐

11-27 12:36
已编辑
门头沟学院 前端工程师
Apries:这个阶段来说,很厉害很厉害了,不过写的简历确实不是很行,优势删掉吧,其他的还行
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
评论
8
35
分享
牛客网
牛客企业服务