爱奇艺笔试2021/8/1 总结结
爱奇艺笔试
由于爱奇艺发送的邮件中说明了不让随意传播试题内容,所以我只说一下非常粗略的题型吧。
第一部分
选择题:python,Java基础语法,基础知识。操作系统,网络等基础知识
第二部分
第一题
SQL题非常简单,我的答案:
select demand_id, count(id) as count from Task group by demand_id having count > 1;
第二题
一个数组,一个滑动窗口,求额,,,算了不多说了,给一下我的代码,只过了66%,想看完整题目的私信我吧唉,,
我的错误,是k,k不一定是3,但是我只初始化了3个值,以下是我的错误代码。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String[] split = s.split(",");
String[] last = split[split.length - 1].split(":");
int[] arr = new int[split.length];
int k = Integer.valueOf(last[1]);
for (int i = 0; i < split.length-1; i++) {
arr[i] = Integer.valueOf(split[i]);
}
arr[split.length - 1] = Integer.valueOf(last[0]);
maxP(arr, k);
}
private static void maxP(int[] arr, int k) {
double maxRes = 0;
double sum = arr[0] + arr[1] + arr[2];
double prejun = sum / k;
double curjun = 0;
for (int i = 3; i < arr.length; i++) {
sum = sum + arr[i] - arr[i-k];
curjun = sum / k;
if ((curjun - prejun) / prejun > maxRes) {
maxRes = (curjun - prejun) / prejun;
}
prejun = curjun;
}
maxRes *= 100;
DecimalFormat df = new DecimalFormat("#.00");
String res = df.format(maxRes);
System.out.println(res+"%");
} 2021/8/3更新,根据评论区大家的指导重新写了maxP方法 :smile:
private static void maxP(int[] arr, int k) {
double maxRes = 0;
double sum = 0;
// 先初始化前k个
for (int i = 0; i < k; i++) {
sum += arr[i];
}
double preSum = sum;
double curSum = 0;
// 从第k个开始,遍历到结尾,计算平均增幅取最大放到maxRes
// 评论区说可以不用算均值,意思是:当前均值 = 当前和/k 前一个均值 = 前一个和/k
// 平均值增幅 = (当前均值 - 前一个均值)/前一个均值 = (当前和 - 前一个和)/前一个和
for (int i = k; i < arr.length; i++) {
sum = sum + arr[i] - arr[i-k];
curSum = sum;
maxRes = Math.max(maxRes, (curSum - preSum) / preSum);
preSum = curSum;
}
maxRes *= 100;
DecimalFormat df = new DecimalFormat("#.00");
String res = df.format(maxRes);
System.out.println(res+"%");
} 第三题
这题提示说是贪心,但我觉我我写的没啥问题,只过了50%,详细我不说了,想要题目的私信我吧,,
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String[] strings = s.split(",");
int[] rains = new int[strings.length];
rains[0]=Integer.valueOf(strings[0].charAt(1)-'0');
for (int i = 1; i < strings.length-1; i++) {
rains[i] = Integer.valueOf(strings[i]);
}
rains[strings.length - 1] = Integer.valueOf(strings[strings.length - 1].charAt(0) - '0');
// System.out.println(Arrays.toString(rains));
int[] ans = new int[rains.length];
process(rains, ans);
System.out.println(Arrays.toString(ans));
}
private static void process(int[] rains, int[] ans) {
HashSet<Integer> rained = new HashSet<>();
for (int i = 0; i < rains.length; i++) {
if (rains[i] != 0) {
if (rained.contains(rains[i])) {
ans = new int[rains.length];
return;
}
ans[i] = -1;
rained.add(rains[i]);
} else {
for (int j = i+1; j < rains.length; j++) {
if (rains[j] != 0 && rained.contains(rains[j])) {
ans[i] = rains[j];
rained.remove(rains[j]);
break;
}
}
}
}
} 2021/8/3 更新process方法,新添加了一个判断
private static void process(int[] rains, int[] ans) {
Set<Integer> rained = new HashSet<>();
for (int i = 0; i < rains.length; i++) {
if (rains[i] != 0) {
if (rained.contains(rains[i])) {
ans = new int[0];
return;
}
ans[i] = -1;
rained.add(rains[i]);
} else {
// 遍历一边发现最近能够能够引发洪水的一个湖泊,抽干他!
for (int j = i+1; j < rains.length; j++) {
if (rains[j] != 0 && rained.contains(rains[j])) {
ans[i] = rains[j];
rained.remove(rains[j]);
break;
}
}
// 如果遍历了一遍,发现没有那种能犯洪水的湖泊了,那就随便从有水的湖泊中抽一个
if (ans[i] == 0 && !rained.isEmpty()) {
ans[i] = rained.iterator().next();
rained.remove(ans[i]);
}
}
}
} 第四题
哇,最后一题是搞多线程的,而且是异步的,需要我们实现三个方法,来翻译给的字符串,
public static class Job<V> {
public void newTask(Callable<V> runnable) {
//待实现
}
public void execute(Executor executor) {
//待实现
}
public List<V> get() throws InterruptedException {
//待实现
}
} 真不会做呀,详情私信我吧,,,,,
就这样,宝友们,可不兴说我题目不完整,爱奇艺发的邮件说不让瞎传播哈。
有全ac的大佬,求个完美答案!!!!!!!!!!!!!!
#爱奇艺笔试讨论##笔经##爱奇艺#
查看9道真题和解析
小米集团公司氛围 372人发布