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秋招各大笔试题汇总,c++,java,python多种语言分析,解答。