美团 3.26笔试记录

写了一个小时多一点就写完啦,记录一下题目思路。

  1. 给出一个字符串 , 可以重新排列顺序,问所有的子串中abccca最多出现几次。

    思路:直接记录 a b c的个数即可 , 注意最后一个a可以作为下一个串的开始。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn= 1e6+7 ;
char s[maxn];
int vis[30];
int main(){
    scanf("%s",s + 1);
    int n = strlen(s + 1);
    for(int i = 1; i <= n; i ++){
        vis[s[i] - 'a'] ++;
    }
    int ans = vis[1];
    ans = min(ans , vis[2] / 3);

    ans = min(ans , vis[0] - 1);

    printf ("%d\n",max(0 , ans));

}
  1. 给出一个递增数组,要求找到一个点,使这个点到1号点和n号店的距离之差最小。

    思路:直接遍历即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn= 1e6+7 ;
int a[maxn], n ;
int main(){
    scanf("%d",&n);
    for(int i = 1; i <= n; i ++){
        scanf("%d",&a[i]);
    }
    int ans = 1e9;
    for(int i = 1; i <= n; i ++){
        ans = min(ans , abs(abs(a[1] - a[i]) - abs(a[n] - a[i])));
    }
    printf ("%d\n",ans);
}
  1. 给出n个数,要求从中选任意个数,使得他们的和最大,且为7的倍数。
    思路: , 记录前i个数的和对7取模为j的和的最大值即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn= 1e6+7 ;
const int inf = 0x3f3f3f3f;
int n , a[maxn];
int dp[maxn][10];
int main(){
    scanf("%d",&n);
    for(int i = 1; i <= n; i ++){
        scanf("%d",&a[i]);
    }
    memset(dp , -inf , sizeof(dp));
    dp[0][0] = 0;
    for(int i = 1; i <= n; i ++){
        for(int j = 0; j < 7; j ++){
            dp[i][j] = max(dp[i][j] , dp[i - 1][j]);
            dp[i][j] = max(dp[i][j] , dp[i - 1][((j - a[i]) % 7 + 7) % 7] + a[i]);
            //printf ("%d %d %d\n",i , j , dp[i][j]);
        }

    }
    printf ("%d\n",dp[n][0]);
}
  1. 给出长度为n的数组,求所有长度为奇数的子段的中位数之和。

    思路:两个优先队列动态维护中位数 复杂度

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn= 1e6+7 ;
const int inf = 0x3f3f3f3f;
int n , a[maxn];
priority_queue<int>q1,q2;
void init(){
    while(q1.size()) q1.pop();
    while(q2.size()) q2.pop();
}
void add(int now){
    if(q2.size() == 0){
        q2.push(-now);
        return ;
    }
    if(now >= -q2.top()){
        q2.push(-now);
        if(q2.size() > q1.size() + 1){
            int x = q2.top();
            q2.pop();
            q1.push(-x);
        }
    }
    else{
        q1.push(now);

        if(q1.size() > q2.size()){
            int x = q1.top();
            q1.pop();
            q2.push(-x);
        }
    }
}
int main(){
    scanf("%d",&n);
    ll ans = 0;
    for(int i = 1; i <= n; i ++){
        scanf("%d",&a[i]);
        ans += a[i];
    }
    for(int l = 1; l <= n; l ++){
        init();
        add(a[l]);
        for(int r = l + 1;r <= n; r ++){
            add(a[r]);
            if((r - l + 1) % 2){
                ans -= q2.top();
            }
        }
    }
    printf ("%lld\n",ans);
}
  1. 有n个任务,完成每个任务需要的时间为,在完成该任务前,必须先完成一些前置任务,多个任务可以同时进行,问每个任务的最早完成时间。

    思路:topo + dp即可,记录每个任务的最早完成时间。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn= 1e6+7 ;
const int inf = 0x3f3f3f3f;
int n;
int l[maxn] , now[maxn] , de[maxn],ans , vis[maxn];
vector<int> vec[maxn] , e[maxn];
void topo(){
    queue<int> que;
    for(int i = 1; i <= n; i ++){
        if(de[i] == 0){
            que.push(i);
            vis[i] = 1;
            now[i] = now[i] + l[i];
        }
    }
    while(que.size()){
        int u = que.front();
        que.pop();
        for(int i = 0; i < e[u].size(); i ++){
            int to = e[u][i];
            de[to]--;
            now[to] = max(now[to] , now[u]);
            if(de[to] == 0 && vis[to] == 0){
                que.push(to);
                vis[to] = 1;
                now[to] += l[to];
            }
        }
    }
}
int main(){
    scanf("%d",&n);
    for(int i = 1; i <= n; i ++){
        scanf("%d",&l[i]);
        int c , x;
        scanf("%d",&c);
        de[i] = c;
        for(int j = 1; j <= c; j ++){
            scanf("%d",&x);
            vec[i].push_back(x);
            e[x].push_back(i);
        }
    }
    topo();
    for(int i = 1; i <= n; i ++){
        printf ("%d ",now[i]);
    }
}
#美团笔试##笔试题目##美团#
全部评论
咦 你是五道编程嘛?我是四道编程+一些选择题
3 回复 分享
发布于 2022-03-26 18:04
大佬第三题的动态规划推导公式可否再细说一下,有点看不懂
1 回复 分享
发布于 2022-03-26 20:06
前两题思路都一样的 不知道为啥都是只过27%(java)
1 回复 分享
发布于 2022-03-26 19:57
强 蹲一个第三题的思路
1 回复 分享
发布于 2022-03-26 19:18
太牛了大佬 🤓
1 回复 分享
发布于 2022-03-26 19:12
可以用本地IDE吗?
点赞 回复 分享
发布于 2022-05-06 18:11
a了2.5,无了误无了
点赞 回复 分享
发布于 2022-04-10 16:49
为啥这样写不对? ``` vector<vector<int>> dp(n + 1, vector<int>(7, INT_MIN));     dp[0][0] = 0;  // 一个数都不选          for (int i = 1; i <= n; ++i) {         for (int j = 0; j < 7; ++j) {             int last = ((j - nums[i - 1]) % 7 + 7) % 7;             // 如果选了nums[i],就从dp[i - 1][j - nums[i]]转移而来             dp[i][j] = max(dp[i - 1][j], dp[i - 1][last] + nums[i - 1]);         }     }     cout << dp[n][0] << endl; ```
点赞 回复 分享
发布于 2022-04-01 16:16
第二题我还以为遍历会超时,我看n能到10^7,我以为是故意要你二分,花了好久调试二分
点赞 回复 分享
发布于 2022-04-01 13:34
同一场还没收到面试是不是凉了,呜呜呜
点赞 回复 分享
发布于 2022-03-31 12:00
大佬第三题思路能细讲下吗?我用的DFS加MAP缓存结果过了64,做的时候不知道怎么DP
点赞 回复 分享
发布于 2022-03-28 10:50
第四题没过脑子暴力直接超时,但还有87%的通过,这个还算分吗?
点赞 回复 分享
发布于 2022-03-27 18:57
第一个题是不是没考虑a出现次数为0的情况啊,如果为0 vis[0]-1为负数了输出不对呀
点赞 回复 分享
发布于 2022-03-27 17:32
大佬,第三题状态转移方程是否可以写为dp[i-1][(j+a[i])%7] = max(dp[i-1][(j+a[i])%7] , dp[i-1][(j+a[i])%7] +a[i])就是每一趟j不一定非要更新余数为j的,
点赞 回复 分享
发布于 2022-03-27 14:33
大佬tql
点赞 回复 分享
发布于 2022-03-27 14:17
优先队列的想法真妙啊..我只想到每层维护当前中位数,区间每增大2就判断新增加的数是否一个大于中位数一个小于中位数,如果是的话就保持中位数不变,否则重新判断中位数,时间复杂度太高了最后20过不了
点赞 回复 分享
发布于 2022-03-27 09:07
最后时间到了 没交卷 系统会自动提交吗
点赞 回复 分享
发布于 2022-03-26 23:48
woc tql 大佬
点赞 回复 分享
发布于 2022-03-26 21:11
第三题对负数也可以吗?
点赞 回复 分享
发布于 2022-03-26 21:06
大佬太强了
点赞 回复 分享
发布于 2022-03-26 20:38

相关推荐

“无名小卒,还是名扬天下?”我知道很多人都不觉得我能走到今天这一步,当然,也包括我自己。在我的人生里,有两部作品刻下了最深的烙印:《斗破苍穹》与《龙族》。它们总被人拿来对照:一边是萧炎的桀骜轻狂,一边是路明非的怯懦衰颓。有人说,天蚕土豆没见过魂天帝,但江南见过真凯撒。我时常觉得,自己就是那个衰小孩路明非。可路明非可以开挂,我不可以;我也无数次幻想过,能拥有萧炎那般年少轻狂的人生,可我没有他与生俱来的逆天天赋。我只是个平庸的普通人,一个看过《斗破苍穹》却开不了挂的路明非,只能一步一步往上爬。从我下定决心找实习的那一刻起,我就给自己定下了目标:“我一定要为字节跳动卖命.jpg”。萧炎有他的三年之约,我有我的两年半之约(其实是一年半)。2024.11.20,科大讯飞的第一封实习offer落进邮箱,我迈出了这场奔赴的第一步。2025.8.18,放弃百度转正的安稳机会,转身走进前路未卜的不确定里。我很感谢我在百度的mentor,是她从茫茫人海选中了我,给了我大厂实习的机会。即便有段时间我状态差、产出不理想,她依旧愿意认可我、希望我留下转正。2025.11.14,我选择走进字节跳动,以实习生的身份重新出发。2026.3.25&nbsp;-&nbsp;3.31,一周速通上海飞书,幸遇赏识我的伯乐,斩获Special&nbsp;Offer。被告知面试通过的那一刻,我的内心无比平静,就像这个offer本就该属于我。不是侥幸,是应得的。这一路,有人看轻过我的出身,不相信我能走到这里;也有人在我看不见前路的时候,替我举过灯。没有他们的鼓励与支撑,就没有今天站在这里的我。我看到了自强不息的激荡,那是一个双非的伟大乐章!我是雨夜迈巴赫,我要开启属于我的新篇章了。
在看牛客的本杰明很勇...:真心祝贺l总 我永远的偶像 我滴神
春招至今,你收到几个面试...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-15 10:59
已编辑
爱写代码的菜code...:哎,自己当时拿到字节offer的时候也在感叹终于拿到了,自己当时最想去的企业就是字节,结果还是阴差阳错去了鹅厂。祝uu一切顺利!!!
点赞 评论 收藏
分享
评论
60
199
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务