字节笔试 字节笔试题 0504
笔试时间:2025年5月4日
往年笔试合集:
第一题
现有一个长度为 n 的正整数数组 a,你能否在其中找出 3 个正整数,它们无法构成三角形。如果可以则输出 "Yes",否则输出 "No"。
输入描述
本题为多组测试数据:
第一行输入一个正整数 T,代表测试数据组数。
对于每组测试数据:
第一行输入一个正整数 n,代表数组长度。
第二行输入 n 个正整数 ai,代表数组的元素。
输出描述
输出 T 行,每行输出 "Yes" 或 "No"。输出 T 行,每行输出 "Yes" 或 "No"。
样例输入
2
6
3 4 5 6 6 6
5
1 1 5 5 5
样例输出
No
Yes
参考题解
先把数组从小到大排好,然后用一个窗口依次考察每三个相邻的数:如果遇到某组三条边中最小的两条和不大于最大那条,就说明这三条根本凑不成三角形,立刻输出 “Yes”;如果整个遍历结束都没发现这样的三元组,就输出 “No”。
C++:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
for (int _ = 0; _ < T; _++) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end());
bool f = false;
for (int i = 2; i < n; i++) {
if (a[i - 2] + a[i - 1] <= a[i]) {
cout << "Yes" << endl;
f = true;
break;
}
}
if (!f) {
cout << "No" << endl;
}
}
return 0;
}
Java:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
for (int _ = 0; _ < T; _++) {
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
Arrays.sort(a);
boolean f = false;
for (int i = 2; i < n; i++) {
if (a[i - 2] + a[i - 1] <= a[i]) {
System.out.println("Yes");
f = true;
break;
}
}
if (!f) {
System.out.println("No");
}
}
scanner.close();
}
}
Python:
T = int(input())
for _ in range(T):
n = int(input())
a = list(map(int, input().split()))
a.sort()
f = False
for i in range(2, n):
if a[i - 2] + a[i - 1] <= a[i]:
print("Yes")
f = True
break
if not f:
print("No")
第二题
小红拿到了一个仅由英文字母组成的字符串。她想知道某单词在该字符串中出现了多少次,你能帮帮她吗? 请注意,小红会询问多次。
输入描述
第一行输入两个正整数 n 和 q,代表字符串长度和询问次数。
第二行输入一个长度为 n 的,仅由小写英文字母组成的字符串,代表小红拿到的字符串。
接下来的 q 行,每行输入一个仅由小写英文字母组成的字符串,代表小红的每次查询。
数据范围: 1 ≤ n, q ≤ 10⁵ 每次查询的字符串长度不超过 10。
输出描述
输出 q 行,每行输出一个整数,代表该次查询的结果。
样例输入
10 3
bobobalice
bob
alice
red
样例输出
2
1
0
参考题解
C++:
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
cin.ignore(); // 忽略换行符
string s;
getline(cin, s);
unordered_map<string, int> mp;
for (int i = 1; i <= 10; i++) {
for (int j = i - 1; j < n; j++) {
string str_part = s.substr(j - i + 1, i);
mp[str_part]++;
}
}
for (int _ = 0; _ < q; _++) {
string p;
getline(cin, p);
cout << mp[p] << endl;
}
return 0;
}
Java:
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int q = scanner.nextInt();
scanner.nextLine(); // 消耗掉换行符
String s = scanner.nextLine();
HashMap<String, Integer> mp = new HashMap<>();
for (int i = 1; i <= 10; i++) {
for (int j = i - 1; j < n; j++) {
String strPart = s.substring(j - i + 1, j + 1);
mp.put(strPart, mp.getOrDefault(strPart, 0) + 1);
}
}
for (int _ = 0; _ < q; _++) {
String p = scanner.nextLi
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南