饿了么笔试 饿了么笔试题 0321

笔试时间:2025年03月21日

历史笔试传送门:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

题目

对于给定的 n 个整数构成的数组,检查有多少个长度为3的连续子数组b1,b2,b3满足:b1>=b2, b2<=b3。更形象地说,这样的子数组形如'V’状。

输入描述

第一行输入n,表示数组中的元素数量

接下来输入n各整数代表数组元素

输出描述

输出一个整数,代表满足条件的连续子数组数量

样例输入

5

5 1 4 2 3

样例输出

2

参考题解

数组里直接判断即可

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n);

    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    int count = 0;
    for (int i = 0; i < n - 2; i++) {
        if (a[i] >= a[i + 1] && a[i + 1] <= a[i + 2]) {
            count++;
        }
    }

    cout << count << endl;
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

package leetcode;

import java.util.Scanner;

public class nums_v {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];

        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }

        int count = 0;
        for (int i = 0; i < n-3; i++) {
            if (a[i] >= a[i+1] && a[i+1] <= a[i+2]){
                count++;
            }
        }
        System.out.println(count);
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

n = int(input())
a = list(map(int, input().split()))

count = 0
for i in range(n - 2):
    if a[i] >= a[i + 1] and a[i + 1] <= a[i + 2]:
        count += 1

print(count)

第二题

题目

对于给定的长度为 n,仅由小写字母组成的字符串...sn如果有这样的两个不同的位置i和 j,满足i和 j,奇偶性相同且其上的字符 si和 sj;在字母表中相差的位置数小于等于 g,那么我们称i和 j是“有缘分的”。你需要求解,对于给定的 g,字符串s中,有多少对位置是“有缘分的”。字母表的第 1个字母为'a’,第 26 个字母为'z’。两个字符在字母表中的位置差,即为它们在字母表中相隔的字母个数。例如,'a’与'd’之间隔了'b’和'c’两个字母,所以位置差为 2。

输入描述

第一行输入两个整数n, g代表字符串的长度、约束

第二行输入一个长度为n,仅由小写字母组成的字符串s

输出描述

输出一个整数,代表满足条件的"有缘分的"位置对数

样例输入一

3 25

aaa

样例输出一

1

样例输入二

4 1

acbd

样例输出二

2

参考题解

1.分别统计奇数位置和偶数位置的字符频率。2.对每个分组(奇数和偶数),遍历每个字符 c 的频率。对于每个字母,计算其自身组成的字符对数量。如果某个字母出现了 m 次,那么它自身组成的字符对数量为 m * (m - 1) / 2。对于不同的字母对,检查它们在字母表中的位置差的绝对值是否小于等于 g。如果满足条件,则将它们出现次数的乘积累加到结果中。3.最后把奇数分组和偶数分组的结果相加。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <string>
#include <cmath>

using namespace std;

long long calculate(const vector<int>& count, int g) {
    long long sum = 0;
    for (int i = 0; i < 26; ++i) {
        sum += (long long)count[i] * (count[i] - 1) / 2;
        for (int j = i + 1; j < 26; ++j) {
            if (abs(i - j) <= g) {
                sum += (long long)count[i] * count[j];
            }
        }
    }
    return sum;
}

int main() {
    int n, g;
    cin >> n >> g;
    string s;
    cin >> s;

    vector<int> countOdd(26, 0);
    vector<int> countEven(26, 0);

    for (int i = 0; i < n; ++i) {
        char c = s[i];
        if ((i + 1) % 2 == 1) {
            countOdd[c - 'a']++;
        } else {
            countEven[c - 'a']++;
        }
    }

    long long res = 0;
    res += calculate(countOdd, g);
    res += calculate(countEven, g);
    cout << res << endl;

    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import lava.util.scanner;

public class Main {
 public static void main(Stringll args){
        Scanner 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

第一题:n为奇数输出n个1,n为偶数输出n-1个0即可:#include&nbsp;&lt;iostream&gt;using&nbsp;namespace&nbsp;std;int&nbsp;main()&nbsp;{int&nbsp;t;cin&nbsp;&gt;&gt;&nbsp;t;while&nbsp;(t&nbsp;--)&nbsp;{int&nbsp;n;cin&nbsp;&gt;&gt;&nbsp;n;if&nbsp;(n&nbsp;&amp;&nbsp;1)&nbsp;{for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i&nbsp;++)&nbsp;{cout&nbsp;&lt;&lt;&nbsp;1&nbsp;&lt;&lt;&nbsp;&quot;&nbsp;&quot;;}cout&nbsp;&lt;&lt;&nbsp;'\n';}&nbsp;else&nbsp;{for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n&nbsp;-&nbsp;1;&nbsp;i&nbsp;++)&nbsp;{cout&nbsp;&lt;&lt;&nbsp;1&nbsp;&lt;&lt;&nbsp;&quot;&nbsp;&quot;;}cout&nbsp;&lt;&lt;&nbsp;0&nbsp;&lt;&lt;&nbsp;'\n';}}}第二题:如果你有n个长度相同的木棍,那么他们组成正m边形的组合是C(n,m)个,C是组合数,计下数就可以了。#include&nbsp;&lt;bits/stdc++.h&gt;using&nbsp;namespace&nbsp;std;#define&nbsp;int&nbsp;long&nbsp;longconst&nbsp;int&nbsp;p&nbsp;=&nbsp;998244353;const&nbsp;int&nbsp;N&nbsp;=&nbsp;5e3&nbsp;+&nbsp;10;int&nbsp;h[N],&nbsp;rh[N];int&nbsp;C(int&nbsp;n,&nbsp;int&nbsp;m)&nbsp;{if&nbsp;(n&nbsp;&lt;&nbsp;m)&nbsp;return&nbsp;0;return&nbsp;h[n]&nbsp;*&nbsp;rh[m]&nbsp;%&nbsp;p&nbsp;*&nbsp;rh[n&nbsp;-&nbsp;m]&nbsp;%&nbsp;p;}int&nbsp;qs(int&nbsp;a,&nbsp;int&nbsp;b)&nbsp;{int&nbsp;res&nbsp;=&nbsp;1;while&nbsp;(b)&nbsp;{if&nbsp;(b&nbsp;&amp;&nbsp;1)&nbsp;res&nbsp;=&nbsp;res&nbsp;*&nbsp;a&nbsp;%&nbsp;p;a&nbsp;=&nbsp;a&nbsp;*&nbsp;a&nbsp;%&nbsp;p;b&nbsp;&gt;&gt;=&nbsp;1;}return&nbsp;res;}signed&nbsp;main()&nbsp;{h[0]&nbsp;=&nbsp;rh[0]&nbsp;=&nbsp;1;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;N&nbsp;;&nbsp;i&nbsp;++)&nbsp;{h[i]&nbsp;=&nbsp;h[i&nbsp;-&nbsp;1]&nbsp;*&nbsp;i&nbsp;%&nbsp;p;rh[i]&nbsp;=&nbsp;qs(h[i],&nbsp;p&nbsp;-&nbsp;2);}int&nbsp;n;cin&nbsp;&gt;&gt;&nbsp;n;map&lt;int,&nbsp;int&gt;&nbsp;mp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i&nbsp;++)&nbsp;{int&nbsp;x;cin&nbsp;&gt;&gt;&nbsp;x;mp[x]&nbsp;++;}for&nbsp;(int&nbsp;i&nbsp;=&nbsp;3;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i&nbsp;++)&nbsp;{int&nbsp;res&nbsp;=&nbsp;0;for&nbsp;(auto&amp;&nbsp;it&nbsp;:&nbsp;mp)&nbsp;{res&nbsp;=&nbsp;(res&nbsp;+&nbsp;C(it.second,&nbsp;i))&nbsp;%&nbsp;p;}cout&nbsp;&lt;&lt;&nbsp;res&nbsp;&lt;&lt;&nbsp;'&nbsp;';}}3,最小生成树模板题,注意处理一下正边#include&nbsp;&lt;cmath&gt;#&nbsp;include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;queue&gt;using&nbsp;namespace&nbsp;std;const&nbsp;int&nbsp;N&nbsp;=&nbsp;1e5&nbsp;+&nbsp;10;int&nbsp;p[N];int&nbsp;find(int&nbsp;x)&nbsp;{if&nbsp;(x&nbsp;!=&nbsp;p[x])&nbsp;p[x]&nbsp;=&nbsp;find(p[x]);return&nbsp;p[x];}int&nbsp;main()&nbsp;{int&nbsp;n,&nbsp;m;cin&nbsp;&gt;&gt;&nbsp;n&nbsp;&gt;&gt;&nbsp;m;priority_queue&lt;pair&lt;int,&nbsp;pair&lt;int,&nbsp;int&gt;&gt;&gt;&nbsp;pq;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i&nbsp;++)&nbsp;p[i]&nbsp;=&nbsp;i;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1&nbsp;;&nbsp;i&nbsp;&lt;=&nbsp;m;&nbsp;i&nbsp;++)&nbsp;{int&nbsp;u,&nbsp;v,&nbsp;x;cin&nbsp;&gt;&gt;&nbsp;u&nbsp;&gt;&gt;&nbsp;v&nbsp;&gt;&gt;&nbsp;x;pq.push({x,&nbsp;{u,&nbsp;v}});}long&nbsp;long&nbsp;res&nbsp;=&nbsp;0;while&nbsp;(pq.size()&nbsp;&gt;&nbsp;0)&nbsp;{auto&nbsp;t&nbsp;=&nbsp;pq.top();pq.pop();int&nbsp;u&nbsp;=&nbsp;t.second.first;int&nbsp;v&nbsp;=&nbsp;t.second.second;int&nbsp;x&nbsp;=&nbsp;t.first;if&nbsp;(x&nbsp;&gt;=&nbsp;0)&nbsp;{res&nbsp;+=&nbsp;x;p[find(u)]&nbsp;=&nbsp;find(v);}&nbsp;else&nbsp;if&nbsp;(find(u)&nbsp;!=&nbsp;find(v))&nbsp;{res&nbsp;+=&nbsp;x;p[find(u)]&nbsp;=&nbsp;find(v);}}cout&nbsp;&lt;&lt;&nbsp;res&nbsp;&lt;&lt;&nbsp;'\n';
投递饿了么等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

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