字节笔试 字节笔试题 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等多种语言做法集合指南