美團筆試 美團筆試題 0328
筆試時間:2025年03月28日
歷史筆試傳送門:
第一題
題目:小美的生物鐘
小美工作得很累,現(xiàn)在已經(jīng)是深夜,她的生物鐘已經(jīng)亂了!為了身體健康,她決定現(xiàn)在開始調(diào)整自己的生物鐘?,F(xiàn)在給定 n 天小美的工作時間,她認為作息是規(guī)律的當且僅當每天的工作時間不能超過 k??墒怯捎诠ぷ餍枰?,她每天需要工作 a_i。為了身體健康,她決定在工作總時長不變的情況調(diào)休,即某天的工作量可以在另外一天完成。現(xiàn)在她想知道能不能完成調(diào)休使得作息是規(guī)律的,請你幫她計算一下。
輸入描述
每個測試文件均包含多組測試數(shù)。
第一行輸入一個整數(shù) T(1 < T < 1000),代表數(shù)據(jù)組數(shù),每組測試數(shù)據(jù)描述如下: 對于每一組測試數(shù)據(jù):第一行兩個整數(shù) n,k(1 < n < 10^5,1< k< 24),表示工作天數(shù)和作息規(guī)律的時長限制。
第二行 n 個整數(shù),第 i 個數(shù)為 a_i(1< a_i< 24),表示工作時長。 數(shù)據(jù)保證單個測試文件中 Σ n< 10^5。
輸出描述
共 T 行,每行一個字符串,若能完成調(diào)休使得作息是規(guī)律的,輸出 "YES",否則輸出 "NO"。
樣例輸入
2
1 2
2
1 2
3
樣例輸出
YES
NO
參考題解
計算總工作時長:對于每組測試數(shù)據(jù),計算所有工作日的總時長 S。判斷可行性:若 S <= n * k,則輸出 "YES";否則輸出 "NO"。
C++:[此代碼未進行大量數(shù)據(jù)的測試,僅供參考]
#include <iostream> #include <vector> using namespace std; int main() { int T; cin >> T; while (T--) { int n, k; cin >> n >> k; vector<int> a(n); int total = 0; for (int i = 0; i < n; ++i) { cin >> a[i]; total += a[i]; } if (total <= n * k) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
Java:[此代碼未進行大量數(shù)據(jù)的測試,僅供參考]
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); while (T-- > 0) { int n = scanner.nextInt(); int k = scanner.nextInt(); int[] a = new int[n]; int total = 0; for (int i = 0; i < n; i++) { a[i] = scanner.nextInt(); total += a[i]; } if (total <= n * k) { System.out.println("YES"); } else { System.out.println("NO"); } } scanner.close(); } }
Python:[此代碼未進行大量數(shù)據(jù)的測試,僅供參考]
T = int(input()) for _ in range(T): n, k = map(int, input().split()) a = list(map(int, input().split())) total = sum(a) if total <= n * k: print("YES") else: print("NO")
第二題
題目:數(shù)組2.0
小美有一個長度為 n 的數(shù)組 a_1,a_2,...,a_n?,F(xiàn)在每次可以執(zhí)行以下操作之一: 1.刪除當前數(shù)組的第一個元素 2.刪除當前數(shù)組的最后一個元素若想要數(shù)組中極差最小,求最少操作次數(shù)?!緲O差】數(shù)組的極差定義為數(shù)組中最大值和最小值的差。
輸入描述
每個測試文件均包含多組測試數(shù)。
第一行輸入一個整數(shù) T(1< T< 1000),代表數(shù)據(jù)組數(shù),每組測試數(shù)據(jù)描述如下: 對于每一組測試數(shù)據(jù): 第一行一個整數(shù) n(1< n < 10^5)。
第二行 n 個整數(shù),第 i 個數(shù)為 a_i(1< a_i< 10^9) 數(shù)據(jù)保證單個測試文件中 Σ n <= 10^5。
輸出描述
T 行,每行一個整數(shù),表示花費的最少代價。
樣例輸入
2
2
1 1
2
1 2
樣例輸出
0
1
參考題解
找到最長的一個子數(shù)組,使得其只包含一個類型的數(shù)字??傞L度減去上述步驟的數(shù)組長度即可得到答案。
C++:[此代碼未進行大量數(shù)據(jù)的測試,僅供參考]
#include <iostream> #include <vector> using namespace std; int main() { int T; cin >> T; while (T--) { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; } int max_sub = 1; int pre = nums[0]; int ans = 1; for (int i = 1; i < n; ++i) { if (nums[i] == pre) { max_sub += 1; } else { max_sub = 1; pre = nums[i]; } ans = max(ans, max_sub); } cout << (n - ans) << endl; } return 0; }
Java:[此代碼未進行大量數(shù)據(jù)的測試,僅供參考]
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); while (T-- > 0) { int n = scanner.nextInt(); int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = scanner.nextInt(); } int maxSub = 1; int pre = nums[0];
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
2025打怪升級記錄,大廠筆試合集 C++, Java, Python等多種語言做法集合指南