华为面试(质量与流程IT管理部—信息技术工程部)

11.25 数字化IT应用工程师(一面挂)

奇怪的问题 奇怪的算法题 奇怪的面试官 奇怪的面试

项目里面用到的数学原理?

问我 finally的实现原理?tcp三次握手,四次挥手的实现原理? tcp数据包最大为什么是65495字节?

手撕代码这么长?(35分钟)

请设计一个备忘录系统,要求有以下功能:
** • addEvent(int startDate, String content, int num, int period) – 自日期 startDate 开始(startDate 包含在内),添加 num 个以 period 为间隔周期待办事项 content。例如若命令为 addEvent(0,"a",4,2),表示于日期 0,2,4,6 分别添加待办事项 "a"。**
** o 返回本次操作共计新增待办事项的数量。若部分日期上已存在该事项,无论该事项是否设置为已完成,这些日期不需添加该事项。**
** • finishEvent(int date, String content) – 将日期 date 上的 content 事项设置为已完成。**
** o 若该日期上不存在此事项,或该日期上此事项已完成,返回 false;**
** o 若设置操作完成,则返回 true。**
** • removeEvent(int date, String content) – 移除日期 date 上的 content 事项。**
** o 若该日期上不存在此事项,返回 false;**
** o 若移除操作完成,则返回 true。**
** • queryTodo(int startDate, int endDate) – 查询从 startDate 到 endDate(起止日期均包含在内)这段日期内所有的未完成的 content 事项,并将查询到的事项以字符串形式按日期升序记于数组后返回,若查询到相同日期的多条待办事项,则将其按字典序排列。**
** 示例 1:**
** 输入:["MemoSystem","addEvent","queryTodo","finishEvent","removeEvent"]**
** [[],[2,"eat a burger",2,3],[0,5],[2,"eat a burger"],[2,"eat a burger"]]**
** 输出:[null,2,["eat a burger","eat a burger"],true,true]**
** 解释:**
** MemoSystem ms = MemoSystem();**
** ms.addEvent(2,"eat a burger",2,3); // 自日期 2 开始,添加 2 个间隔周期为 3 的待办事项 "eat a burger",即在日期 2、5 添加该待办事项。本次操作共新添加了 2 个待办事项,返回 2**
** ms.queryTodo(0,5); //查询自日期 0 至日期 5 的所有未完成的事项,返回数组 ["eat a burger","eat a burger"]**
** ms.finishEvent(2,"eat a burger"); // 将系统中日期为 2 的待办事项 "eat a burger" 设置为已完成,返回 true**
** ms.removeEvent(2,"eat a burger"); // 移除系统中日期为 2 的事项 "eat a burger",返回 true**
** 注:输出中的 null 表示此对应函数无输出(其中:C 的构造函数有返回值,但是也是无需输出)**
** Yangpeng y00*46对所有人说说: 02:18 PM
** 示例 2:**
** 输入:**
** ["MemoSystem","addEvent","addEvent","removeEvent","finishEvent","addEvent","addEvent","queryTodo","queryTodo","finishEvent","addEvent"]**
** [[],[2,"save files",1,1],[2,"eat a burger",1,1],[2,"drink water"],[1,"drink water"],[0,"eat a burger",5,2],[2,"save files",1,1],[0,4],[10,11],[2,"eat a burger"],[2,"eat a burger",1,1]]**
** 输出:[null,1,1,false,false,4,0,["eat a burger","eat a burger","save files","eat a burger"],[],true,0]**
** 解释:**
** MemoSystem ms = MemoSystem();**
** 第 3 个命令 ms.addEvent(2,"eat a burger",1,1); // 同一个日期可以增加不同的待办事项,本次操作共新添加了 1 个待办事项,返回 1**
** 第 6 个命令 ms.addEvent(0,"eat a burger",5,2); // 自日期 0 开始,添加 5 个间隔周期为 2 的待办事项 "eat a burger",即在日期 0,2,4,6,8 添加该待办事项。由于日期 2 的记录中已存在该事项,因此本次操作共新添加了 4 个待办事项,返回 4**
** 第 8 个命令 ms.queryTodo(0,4); // 查询自日期 0 至日期 4 的所有未完成的事项,按日期返回,其中日期 2 的待办事项需按字典序排列,返回数组 ["eat a burger","eat a burger","save files","eat a burger"]**
** 第 9 个命令 ms.queryTodo(10,11); // 查询自日期 10 至日期 11 的所有未完成的事项,返回空数组 []**
** 注:输出中的 null 表示此对应函数无输出(其中:C 的构造函数有返回值,但是也是无需输出)**
** 提示:**
** 1 <= addEvent,finishEvent,removeEvent,queryTodo 总操作数 <= 1000**
** 0 <= startDate <= endDate <= 1000**
** 0 < num, period, 0 <= startDate + (num - 1) * period <= 1000**
** 1 <= content.length <= 20 ,仅包含小写字母、大写字母与空格**
** 0 <= date <= 1000**
** queryTodo 函数对于 Java/Js/Python/Go 语言,如果返回的记录为空,则返回空数组**

import java.util.*;


public class MemoSystem {
    static Map<Integer,Map<String,Boolean>> map = new HashMap<>();
    public static void main(String[] args) {
        MemoSystem ms = new MemoSystem();
        System.out.println(ms.addEvent(2, "save files", 1, 1));
        System.out.println(ms.addEvent(2, "eat a burger", 1, 1));
        System.out.println(ms.removeEvent(2, "drink water"));
        System.out.println(ms.finishEvent(1, "drink water"));
        System.out.println(ms.addEvent(0, "eat a burger", 5, 2));
        System.out.println(ms.addEvent(2, "save files", 1, 1));

        String[] ss = ms.queryTodo(0, 4);
        System.out.println(Arrays.toString(ss));
        String[] ss1 = ms.queryTodo(10, 11);
        System.out.println(Arrays.toString(ss1));
        System.out.println(ms.finishEvent(2, "eat a burger"));
        System.out.println(ms.addEvent(2, "eat a burger", 1, 1));


    }
    int addEvent(int startDate, String content, int num, int period){
        int pos = startDate;
        int cnt = 0;
        for(int i = 0;i < num;i++){
            Map<String,Boolean> map1 = map.getOrDefault(pos,new HashMap<>());
            if(!map1.containsKey(content)){
                map1.put(content,false);
                map.put(pos,map1);
                cnt++;
            }
            pos += period;

        }
        return cnt;
    }
    boolean finishEvent(int date, String content){
        Map<String, Boolean>  map1 = map.get(date);
        if(map1 == null || !map1.containsKey(content) || map1.get(content)){
            return false;
        }
        map1.put(content,true);
        map.put(date,map1);
        return true;
    }
    boolean removeEvent(int date, String content){
        Map<String, Boolean>  map1 = map.get(date);
        if(map1 == null || !map1.containsKey(content)){
            return false;
        }
        map1.remove(content);
        map.put(date,map1);
        return true;
    }
    String[] queryTodo(int startDate, int endDate){
        List<String> list = new ArrayList<>();
        PriorityQueue<String> pq = new PriorityQueue<>();
        for(int i = startDate;i <= endDate;i++){
            Map<String, Boolean>  map1 = map.get(i);
            if(map1 != null){
                for(String s : map1.keySet()){
                    if(!map1.get(s)){
                        pq.add(s);
                    }
                }
                while(!pq.isEmpty()){
                    list.add(pq.poll());
                }
            }

        }
        String[] res = new String[list.size()];
        for (int i = 0; i < res.length; i++) {
            res[i] = list.get(i);
        }
        return res;
    }






}

先问我刷了多少道题(答:300多道)

反反复复问了我四次,机试为什么才100多???

写完代码,然后说今天的面试就到这里哈,你还有什么需要澄清的吗?

???

罢了罢了,你不缺人了直说嘛,还拉我来面试,还这么对待我,浪费时间。

#华为##面经##Java##Java工程师#
全部评论
我上周二面给我15分钟写这题,https://leetcode-cn.com/problems/koko-eating-bananas/solution/golanger-fen-cha-zhao-by-mlt940109-ixkg/。没写出来直接gg
1 回复
分享
发布于 2021-12-20 18:55
面试体验最差的一次
点赞 回复
分享
发布于 2021-11-25 20:09
秋招专场
校招火热招聘中
官网直投
好兄弟,我刚面完,离谱,同一个人,同一道题
点赞 回复
分享
发布于 2021-11-26 17:28
阿里云GTS招2022应届测试开发工程师,欢迎投递: https://www.nowcoder.com/discuss/810128?toCommentId=11398163
点赞 回复
分享
发布于 2021-12-07 17:06
这不摆明摆烂了
点赞 回复
分享
发布于 2022-03-04 10:16

相关推荐

头像
不愿透露姓名的神秘牛友
03-13 14:57
点赞 评论 收藏
转发
点赞 评论 收藏
转发
11 25 评论
分享
牛客网
牛客企业服务