2023 美团笔试题 0902

笔试时间:2023年9月2日 秋招

第一题

题目:小美的升序数组

给定一个大小为n的数组a,请你判断一个数组是否满足以下条件:

1、数组严格升序,即a<a1<a2<...<an

2、对于1<=i<=n-1,我们定义bi=ai+1-ai,则数组b严格降序,即b1>b2>...>bn-1。

输入描述

第一行输入一个正整数n,代表数组的大小。

第二行输入n个正整数ai,代表给定的数组。

3<=n<=10^5

1<=ai<=10^9

输出描述

若满足给定的两个条件,则输出 Yes。否则输出 No。

样例输入

示例一:

3

1 3 4

示例二:

3

1 3 3

样例输出

示例一:

Yes

示例二:

No

参考题解

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] a = new int[n + 1];
        int[] b = new int[n];

        boolean check = true;

        for (int i = 1; i <= n; ++i) {
            a[i] = scanner.nextInt();
            if (a[i] <= a[i - 1])
                check = false;
            b[i - 1] = a[i] - a[i - 1];
        }

        for (int i = 1; i < n - 1; ++i) {
            if (b[i] <= b[i + 1]) {
                check = false;
                break;
            }
        }

        System.out.println(check ? "Yes" : "No");
    }
}

Python:

n = int(input())
a = [0] * (n + 1)
b = [0] * n

check = True

for i in range(1, n + 1):
    a[i] = int(input())
    if a[i] <= a[i - 1]:
        check = False
    b[i - 1] = a[i] - a[i - 1]

for i in range(1, n - 1):
    if b[i] <= b[i + 1]:
        check = False
        break

print("Yes" if check else "No")

第二题

题目:小美的子序列

小美在n行m列的本子上写了许多字母,她会在每一行中找出一个字母,然后组成一个字符串。

小美想知道,组成的字符串中是否存在至少一个字符串包含 "meituan" 子序列。

输入描述

第一行输入2个整数n,m(1<=n,m<=1000) 。

接下来n行,每行输入一个长度为m的字符串表示小美写下的字母。

输出描述

若存在至少一个字符串包含 "meituan" 子序列,则输出 "YES",否则输出 "NO"。

样例输入

示例一:

3 3

abc

def

ghi

示例二:

8 2

nm

ex

it

td

ul

qu

ac

nt

样例输出

示例一:

No

解释:显然并不能找到meituan子序列。

示例二:

YES

解释:

第1行选择第2个字母。

第2行选择第1个字母。

第3行选择第1个字母。

第4行选择第1个字母。

第5行选择第2个字母。

第6行选择第2个字母。

第7行选择第1个字母。

第8行选择第1个字母。

组成字符串"meitluan",其中存在"meituan"子序列。

当然,第6行选第1个字母且第5行选第1个字母组成的字符串"meituqan"中也存在"meituan"子序列参考题解

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        scanner.nextLine(); // Consume the newline character

        String[] s = new String[n + 1];
        boolean[][] ext = new boolean[7][n + 1];
        boolean[][] dp = new boolean[n + 1][7];

        for (int i = 1; i <= n; ++i) {
            s[i] = scanner.nextLine();
            for (int j = 1; j <= m; ++j) {
                int t = decode(s[i].charAt(j - 1));
                if (t >= 0) {
                    ext[t][i] = true;
                }
            }
        }

        for (int i = 1; i <= n; ++i) {
            for (int j = 0; j < 7; ++j) {
                if (j == 0) {
                    dp[i][j] = ext[j][i];
                } else {
                    dp[i][j] = dp[i - 1][j];
                    if (ext[j][i]) {
                        dp[i][j] = dp[i][j] || dp[i - 1][j - 1];
                    }
                }
            }
        }

        System.out.println(dp[n][6] ? "YES" : "NO");
    }

    static int decode(char c) {
        switch (c) {
            case 'm':
                return 0;
            case 'e':
                return 1;
            case 'i':
                return 2;
            case 't':
                return 3;
            case 'u':
                return 4;
            case 'a':
                return 5;
            case 'n':
                return 6;
        }
        return -1;
    }
}

Python:

def decode(c):
    if c == 'm':
        return 0
    elif c == 'e':
        return 1
    elif c == 'i':
        return 2
    elif c == 't':
        return 3
    elif c == 'u':
        return 4
    elif c == 'a':
        return 5
    elif c == 'n':
        return 6
    return -1

n, m = map(int, input().split())
s = [""]
ext = [[False] * (n + 1) for _ in range(7)]
dp = [[False] * 7 for _ in r

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

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

3 10 评论
分享
牛客网
牛客企业服务