題目說明:
第一道題:
舉辦一場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:面試華為的有機試的同學,可以找我,我還可以給你傳授點不為人知的經驗。