题目说明:
第一道题:
举办一场8小时的聚会,时间段从12:00到20:00点,让来访的客人事先填好到达的时间和离开的时间,为了掌握聚会期间的座位数目,需要先估计不同时间的最大客人数量。
1.到达和离开的时间,以整点计算,输入为整数,比如“12,18”表示客人到达的时间为12点后13点前,离开的时间是17点后18点前。
2.按小时区间统计客人的数量,需要统计[12,13),[13,14)….[19,20)共有8个时间段的最大客人数量。
3.假设邀请的客人最多100个。
假设输入:
12,15
16,17
12,20
-1,-1
程序要求的输出结果为:
[12,13):2
[13,14):2
[14,15):2
[15,16):1
[16,17):2
[17,18):1
[18,19):1
[19,20):1
解题思路如下:
如上图,就是要将每个时间段的值加入map做一个统计。
代码如下:
package com.example.zookeepertest.web;
import javax.sound.midi.Soundbank;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.*;
import java.util.stream.Collectors;
public class JvmTest {
public static void main(String[] args) throws IOException {
Map<String, Integer> result = new HashMap<>();
String temp = "16,18";
String[] split = temp.split(",");
int a = Integer.valueOf(split[0]);
int b = Integer.valueOf(split[1]);
if (a > b || a < 12 || b > 20) {
return;
}
for (int i = a; i < b; i++) {
String key = "[" + i + "," + (i + 1) + ")" + ":";
if (result.containsKey(key))
result.put(key, result.get(key) + 1);
else
result.put(key, 1);
}
result.entrySet().stream().sorted(
Map.Entry.<String, Integer>comparingByKey().reversed()).collect(
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (o1, o2) -> o1, LinkedHashMap::new));
result.entrySet().forEach(e -> System.out.println(e.getKey() + e.getValue()));
}
}
难点:map排序,这个是我写的时候在网上搜的。
其他就是那个算法。理解了就是一行代码。
第二道题:
流水线N个产品每个产品有M个零件,Aij表示生产该零件的生产时间
需满足以下2个条件
1. Aij需要生产出来必须保证Ai-1 j先生产出来
2. Aij需要生产出来必须保证Ai j-1先生产出来
测试用例有
1 3
3.0
2.0
1.0
输出6.000000
3 1
3.0 2.0 1.0
输出6.000000
用例3:
2 4
10.000000 5.000000
4.500000 3.000000
4.499999 2.000000
2.000000 1.000000
21.999999
10.000000 5.000000
4.500000 3.000000
4.499999 2.000000
2.000000 1.000000
21.999999
这道题 现在我也没有看懂什么意思,题的要求 也不太全了。根据输入,输出代码如下:
public class JvmTest {
public static void main(String[] args) throws IOException {
BigDecimal[][] arrays = new BigDecimal[4][2];
arrays[0][0] = new BigDecimal(10.000000);
arrays[0][1] = new BigDecimal(5.000000);
arrays[1][0] = new BigDecimal(4.500000);
arrays[1][1] = new BigDecimal(3.000000);
arrays[2][0] = new BigDecimal(4.499999);
arrays[2][1] = new BigDecimal(2.000000);
arrays[3][0] = new BigDecimal(2.000000);
arrays[3][1] = new BigDecimal(1.000000);
BigDecimal result = new BigDecimal(0.0);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 2; j++) {
result = result.add(arrays[i][j]);
}
}
result = result.subtract(arrays[0][0]).setScale(6, BigDecimal.ROUND_HALF_DOWN);
System.out.println(result);
}
第三道题:
总结:
华为机试 我是二道题,一道200,共400分,
在机试的时候,一定要 沉着冷静,
第二道题是数组,直接没有头绪。
所以,此生 与 华为无缘了。
至此,祝愿其他同学 一路平安。
ps:面试华为的有机试的同学,可以找我,我还可以给你传授点不为人知的经验。