华为机试经验

题目说明:

第一道题:

举办一场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
 
这道题 现在我也没有看懂什么意思,题的要求 也不太全了。根据输入,输出代码如下:
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:面试华为的有机试的同学,可以找我,我还可以给你传授点不为人知的经验。

原文地址:https://www.cnblogs.com/baoyi/p/test.html