阿里云笔试 阿里云笔试题 0414
笔试时间:2024年04月14日
历史笔试传送门:2023秋招笔试合集
第一题
题目
给你一个长度为n的数组a,可以对数组一个元素进行减半,问操作后数组众数的最大值。
输入描述
第一行输入一个正整数n,代表数组长度,第二行 n 个整数,表示输入的数组 a
输出描述
一个整数 x,表示操作后数组众数的最大值。
样例输入
5
1 3 2 2 5
样例输出
2
参考题解
枚举每个数X,如果数2X 或2X+1 存在,那么当前数的出现次数可以增加1。如果大于n/2,更新答案。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <bits/stdc++.h>
const int inf = 0x3f3f3f3f;
using i64 = long long;
void solve() {
int n;
std::cin >> n;
std::vector<int> a(n);
std::map<int, int> cnt;
for (int i = 0; i < n; ++i) {
std::cin >> a[i];
cnt[a[i]]++;
}
int ans = 0;
if (n == 1) {
std::cout << a[0] / 2 << "\n";
return;
}
for (int i = 0; i < n; ++i) {
if (cnt.count(a[i] * 2) or cnt.count(a[i] * 2 + 1)) {
if ((cnt[a[i]] + 1) * 2 >= n) {
ans = std::max(ans, a[i]);
}
}
if (cnt[a[i]] * 2 >= n) {
ans = std::max(ans, a[i]);
}
}
std::cout << ans << "\n";
}
int main() {
std::cin.sync_with_stdio(false);
std::cin.tie(0);
solve();
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
solve(sc);
}
static void solve(Scanner sc) {
int n = sc.nextInt();
int[] a = new int[n];
Map<Integer, Integer> cnt = new HashMap<>();
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
cnt.put(a[i], cnt.getOrDefault(a[i], 0) + 1);
}
int ans = 0;
if (n == 1) {
System.out.println(a[0] / 2);
return;
}
for (int i = 0; i < n; i++) {
if (cnt.containsKey(a[i] * 2) || cnt.containsKey(a[i] * 2 + 1)) {
if ((cnt.get(a[i]) + 1) * 2 >= n) {
ans = Math.max(ans, a[i]);
}
}
if (cnt.get(a[i]) * 2 >= n) {
ans = Math.max(ans, a[i]);
}
}
System.out.println(ans);
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
def solve():
import sys
input = sys.stdin.read
data = input().split()
n = int(data[0])
a = list(map(int, data[1:n+1]))
cnt = {}
for num in a:
if num in cnt:
cnt[num] += 1
else:
cnt[num] = 1
ans = 0
if n == 1:
print(a[0] // 2)
return
for num in a:
if (num * 2 in cnt) or (num * 2 + 1 in cnt):
if (cnt[num] + 1) * 2 >= n:
ans = max(ans, num)
if cnt[num] * 2 >= n:
ans = max(ans, num)
print(ans)
if __name__ == "__main__":
import sys
input = sys.stdin.read
solve()
第二题
题目
小红定义一个字符串是“好串”,当且仅当其满足以下条 1.任意'o'字符最多和一个'o’字符相邻,最多和一个'x'字件:符相邻。2.仼意’x'字符不能和'x'字符相邻。例如,“ooxoo"和"xooxo"是好串,而"xox"、"oxxo"
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024 BAT笔试合集 文章被收录于专栏
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。
查看21道真题和解析