2022 年 4 月 10 日拼多多笔试题解(AC3道)


2022年5月12日,已offer。
================================分割线===================================
这是第一次在牛客上些文章,有点不太习惯。我是昨天投递的拼多多,今天晚上参加的笔试。之前参加了一些大厂的面试,都没有收到很好的offer,孩子哭了。
因此写一波题目分析加上自己很low的代码攒一波幸运值吧,球球给孩子一个offer吧。
因为是孩子第一次在牛客上发文章,希望大家多多包容 ,也希望每个人都能够找到满意的OFFER,加油!

第一题

关于鹅卵石的颜色,还有颜色的等差数列之类的。
100%
#include <iostream>
#include <vector>
using namespace std;
//int a[100005];//鹅卵石 
//100%
int m[100005][2];//
int main() {
    int n;
    cin>>n;
    int tmp;
    
    for(int i=1;i<=n;i++){
    	cin>>tmp;
    	if(m[tmp][0]==-1){
    		continue;
		}
		
		if(m[tmp][0]==0){
			m[tmp][0]=i; //记录首个位置 
		}else{
			//之前的记录正确 
			int d=i-m[tmp][0];
			//第二次出现 
			if(m[tmp][1]==0){
				m[tmp][0]=i;
				m[tmp][1]=d;
			//>=3次出现 
			}else if(m[tmp][1]==d){
				m[tmp][0]=i;
			}else if(m[tmp][1]!=d){
				m[tmp][0]=-1; 
			} 
		} 
	} 
	int cnt=0;
	for(int i=1;i<=100005;i++){
		if(m[i][0]!=0&&m[i][0]!=-1){
			cnt++;
		}
	}
	cout<<cnt<<endl;
	for(int i=1;i<=100005;i++){
		if(m[i][0]!=0&&m[i][0]!=-1){
			cout<<i<<" "<<m[i][1]<<endl; 
		}
	}   
    return 0;
}
//5
//1 1 2 1 3

第二题

关于一道BFS的题目,因为这类题目我写的话,边界条件往往要找很久,不太擅长,就跳过去了没有做。
0%。

第三题

电影院排座问题,有一个注意点,需要是long long 类型,要么最后只通过80%。
100%
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//100%
//int a[100000005];
long long int arr[100005];
long long int M,N,q,L,R;

long long int index(long long int l,long long int r){
	if(r<l){
		return l;
	}//终止查询
	 
	long long int mid=(l+r)/2;
	if(arr[mid]==L){
		return mid;
	}else if(arr[mid]<L){
		return index(mid+1,r);
	}else {
		//arr[mid]>L 
		return index(l,mid-1);
	}
} 
int main() {
    cin>>N>>M;
    long long int tmp;
    for(long long int i=0;i<N;i++){
    	cin>>tmp;
		arr[i]=tmp;
	}
	
	sort(arr,arr+N);//从小到大进行排序
	 
	cin>>q;
	for(long long int i=0;i<q;i++){
		cin>>L>>R;
		bool flag=false;
		//二分查找L,或者比L小的最大值 
		long long int li=index(0,N-1); 
		if(arr[li]==L){
			for(long long int j=li+1;j<N&&arr[j-1]+1<=R;j++){
				if(arr[j]-arr[j-1]>1){
					flag=true;
					cout<<arr[j-1]+1<<endl;
					break;
				}
			}
			if(flag==false){
				cout<<-1<<endl;
			}
		}
		else {
			cout<<L<<endl;
		}
	}
	 
    return 0;
}

//5 10000000000
//3 5 999999997 7 999999998
//100
//999999999 10000000000
//3 7
//6 8
//3 3
//3 4

第四题

这是一道安排的问题,有些人说是动态规划,但是我是用贪心做的。核心在于代码中的tmax,最大的时间。
100%
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//100%
long long int m,n,x;
long long int ans;
long long int a[505];//到达时间 
int main() {
	//车,载重,时间 
    cin>>m>>n>>x;
    long long int tmp;
    for(long long int i=0;i<m;i++){
    	cin>>tmp;
    	a[i]=tmp;
	}
	sort(a,a+m);//排好序
	if(m==0){
		cout<<0<<endl;
		return 0;
	}
	ans=a[m-1]+x;//最后一程
	long long int tmax=a[m-1];//当前的最大时间 
	for(long long int i=m-1-n;i>=0;){
		if(a[i]+2*x>tmax){
			ans=ans+a[i]+2*x-tmax;
			tmax=a[i];
			i=i-n;
		}
		else{
			tmax=tmax-2*x;
			i=i-n;
		}
//		else{
//			break;
//		}
	} 
    cout<<ans<<endl;
	
    return 0;
}
//10 2 10
//10
//10
//10
//10
//10
//10
//10
//10
//40
//40

最后的最后,疫情反复,希望大家注意防护。也希望在今年4月收获满意的OFFER,大家加油!!!
#拼多多笔试##春招##实习##笔试题目##拼多多#
全部评论
我最后一题也是贪心,但就过了80%。我的思路是j = m-n-1,base=a[m-1],ans=a[m-1]+x; while(j>=0){     if(a[j]+2*x=<base){break;}     else{         ans = a[j]+x+(m-1-j)/n*2*x;     } } 楼主能不能说说我哪里错了
点赞
送花
回复
分享
发布于 2022-04-10 22:30
你好,能请你说一下第三题的贪心思路吗?没看到代码的逻辑。谢谢
点赞
送花
回复
分享
发布于 2022-04-11 15:54
蔚来
校招火热招聘中
官网直投

相关推荐

头像
04-29 10:53
已编辑
东北大学 自动化类
点赞 评论 收藏
转发
14 24 评论
分享
牛客网
牛客企业服务