阿里 4月14笔试 --校招

两道编程题:
已AC一道  另外一道通过百分之30case。

第一题:求出最大密集度,题意大概如下(原文不记得啦):给定一个n(数组的长度)   给定一个数组,对于这个数组中必存在一个k值,在该数组中有连续的k个数均大于k,求出最大的k值。

例:
输入:
5
3 1 4 5 2
输出:
2

例如:
输入:
5
1 2 3 4 5
输出:
3

这道题只通过了 30%  也不知是那里出现了问题....个人用的是优先队列结合动态规划去做,不断的更新最优值(下面附上代码 恳请大佬指正)

#include<bits/stdc++.h>
#include<queue>
using namespace std;
int main()
{
int n;
cin>>n;
int arr[n];
for(int i=0; i<n; i++)
cin>>arr[i];

int best_ans=1;  //最优值最下肯定为一

priority_queue <int ,vector<int> ,greater<int> > prip;    //让最小的在队头,因为只需比较最小的和k的关系
for(int i=0;i<n;i++)
{
prip.push(arr[i]);
int k = prip.size();
if(prip.top()>=k)      //满足添加进去的规则
{
best_ans=max(best_ans,k);   //更新最优值
}
else
{                      //不满足添加进去,把队列清空
while(!prip.empty())
prip.pop();

prip.push(arr[i]);    //从当前位置再次探寻。
}
}
cout<<best_ans;
return 0;
}


第二题:
求城市群个数,以及城市群包含的城市数。

题意大概如下:城市之间能互达则这两个城市属于同一个城市群,原每个城市之间都有两两互通的铁路(双向可达),但现在损毁了部分铁路,求城市群个数,以及城市群包含的城市数(升序排列)。
输入:
给定城市的个数n  以及m条损毁铁路的信息
如:
5 5
1 2
2 3
2 4
2 5
3 4

输出:
2
1  4
(一个城市群是2   一个是1 3 4 5)

  • 题解:已AC。
#阿里巴巴##笔经#
全部评论
请问下第二道应该咋解呀
点赞 回复
分享
发布于 2021-04-14 10:34
第一个二分a
点赞 回复
分享
发布于 2021-04-14 11:30
百信银行
校招火热招聘中
官网直投

相关推荐

2 5 评论
分享
牛客网
牛客企业服务