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多种语言分析,解答。


