5.19 华为算法笔试经验

2023-11-18

华为机试一共三道题,对应的分值分别为100分、200分、300分。下面介绍这次笔试题目

第一题

一共有N个员工围成一个圆圈,分别是1,2,…,N每一个员工身上有对应数量的令牌,轮流从顺时针以及逆时针进行报数,顺时针报数周期为R,逆时针报数周期为L。顺时针从1开始报数,逆时针开始从N开始报数,被报到的员工K阵亡,并将令牌给下一个人(顺时针给K+1,逆时针给K-1,如果不存在的话,依次传递),游戏持续到只剩下M个人停止。其中,M=max(L,R)-1。例如,L=R=3,那么第一次报数到3号,3号阵亡,将令牌给4号,4号拥有7块令牌,第二次逆时针报数,8号阵亡,令牌给7号,游戏持续到只剩2名员工。最后返回拥有令牌数最多的员工编号,以及它的令牌数,如果最多的有多个,返回编号最小的那个。
例子:N = 10,L=R=3
第一轮:3号阵亡,4号令牌为7
第二轮:8号阵亡,7号令牌为15
第三轮:6号阵亡,7号令牌为21
第四轮:4号阵亡,2号令牌为9
第五轮:10号阵亡,1号令牌为11
第六轮:9号阵亡,7号令牌为30
第七轮:5号阵亡,7号令牌为35
第八轮:1号阵亡,7号令牌为46
剩于两人,2(9)、7(46)
7号获胜
思路:模拟题,可以采用双向循环链表,由于此题数据量不大,可以直接采用数组打标记的方式

第二题

题目太长,而且图很多,大致意思就是给你一个数组,让你求其构成的hufuman树的WPL
注意点:

  • 输入格式:[2, 3, 4, 5]
  • WPL为带权路径长度,构造树的过程中可以得到,因此不需要实际生成一颗树
  • 优先队列的使用
    由于当时没有意识到WPL的计算不需要构建树,还是构建了树,并用了层次遍历的方法
#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <sstream>

using namespace std;

struct Node {
    Node* left;
    Node* right;
    int w;
    Node(int num) {
        w = num;
        left = right = nullptr;
    }
   /* bool operator> (Node* other)const {
        return w < other->w;
    }
    bool operator< (Node* other)const {
        return w > other->w;
    }*/
};

int main() {
    auto cmp = [](Node* a, Node* b) {
        return a->w > b->w;
    };
    priority_queue<Node*, vector<Node*>, decltype(cmp)> q(cmp);
    string str;
    getline(cin, str);

    str = str.substr(1, str.size() - 2);

    stringstream ss(str);
    while (getline(ss,str,',')) {
        q.push(new Node(stoi(str)));
    }
    while (q.size() > 1) {
        Node* a = q.top();
        q.pop();
        Node* b = q.top();
        q.pop();
        Node* c = new Node(a->w + b->w);
        c->left = a;
        c->right = b;
        q.push(c);
    }
    Node* root = q.top();
    queue<Node*> t;
    int ans = 0;
    t.push(root);
    int level = 0;
    while (!t.empty()) {
        int len = t.size();
        for (int i = 0; i < len; ++i) {
            Node* cur = t.front();
            t.pop();
            if (cur->left == nullptr) {
                ans += cur->w * level;
            }
            else {
                t.push(cur->left);
                t.push(cur->right);
            }
        }
        level++;
    }
    cout << ans << endl;
    return 0;
}

第三题

给你很多个区间,区间之间有交集,主要操作有三种,增加一个区间,删除一个区间,查询一个点所在区间,每个区间都有个编号,要求查询时间复杂度为logn,如果所查询的点有多个区间,返回编号最小的区间编号。
解题思路:主要是查询比较复杂,由于区间数量很多(设为N),可以用一个set标记0-INT_MAX上所有点被覆盖区间的最小编号,然后查询时直接取出,但内存有限,所以考虑用离散化的方式,将所有区间端点进行映射映射到0-2N 范围中,然后对每个区间端点及其右边区域进行标记,采用二分查找查找所在点所离散的端点,即为最终答案,且复杂度为logN。需要注意的事,离散化后端点所代表的的区间为[n, n+1),当所查询的点恰好为右端点时得不到正确答案,因此,需要一个额外的数组记录端点被覆盖的最小区间号。更新和删除复杂度为NlogN

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5.19 华为算法笔试经验 的相关文章

随机推荐

  • Android kotlin自定义自动换行LinearLayout

    目录 1 概述 2 实现步骤 3 kotlin自定义自动换行LinearLayout核心代码实现功能 3 1自定义LinearLayout
  • spring快速入门

    1 导入坐标
  • stack容器

    stack容器 1 stack 基本概念 概念 stack是一种先进后出 First In Last Out FILO 的数据结构 它只有一个出口 栈中只有顶端的元素才可以被外界使用 因此栈不允许有遍历行为 栈中进入数据称为 入栈 push
  • dll load failed: 找不到指定的模块_【已解决】“由于找不到xinput1_3.dll,无法继续执行代码”...

    许多小伙伴在玩游戏或者使用电脑的过程中 电脑突然提示 由于找不到xinput1 3 dll 无法继续执行代码 导致游戏等程序无法正常启动运行 并且导致电脑系统弹窗报错 那xinput1 3 dll丢失怎么修复呢 下面让小编手把手教你解决方法
  • CentOS7安装OpenStack(Liberty)

    1 安装yum源 yum install https buildlogs centos org centos 7 cloud x86 64 openstack liberty centos release openstack liberty
  • 百度智能云千帆大模型三连击:接入LLaMA2等33个模型、上线插件功能和103个Prompt模板

    作为全球首个一站式企业级大模型平台 百度智能云 千帆大模型平台 在提供包括文心一言在内的大模型服务及第三方大模型服务的同时 还提供大模型开发和应用的整套工具链 帮助企业解决大模型从训练到开发过程中的全链条问题 自2023年3月发布以来 千帆
  • 看懂android中的adapter适配器

    首先需要知道一共有4个文件 fragment类 adapter fragment的布局文件 adapter中的item的布局文件 1 首先声明一个控件 RecyclerView 2 然后声明一个adapter类 3 在initView 上
  • python中typeerror_详解python中的TypeError错误解决办法

    新手在学习python时候 会遇到很多的坑 下面来具体说说其中一个 在使用python编写面向对象的程序时 新手可能遇到TypeError this constructor takes no arguments这个错误 例如下面的程序 cl
  • gtest 单元测试工具的基本使用

    gtest 单元测试 gtest 简介 gtest 优点 安装 gtest 测试 demo 总结 gtest 简介 gtest是Google的一套用于编写C 测试的框架 可以运行在很多平台上 包括Linux Mac OS X Windows
  • 获取时间和脸颊、下颚线灯模式

    电流检测的应用 电路检测电路常用于 高压短路保护 电机控制 DC DC换流器 系统功耗管理 二次电池的电流管理 蓄电池管理等电流检测等场景 对于大部分应用 都是通过感测电阻两端的压降测量电流 一般使用电流通过时的压降为数十mV 数百mV的电
  • android动画内存优化,Android 性能优化之内存优化

    定义 内存泄漏 Memory Leak 指 程序在申请内存后 当该内存不需再使用但却无法被释放的现象 内存溢出 OOM 应用程序所需的内存超出了为其分配的内存限额 Android将进程分为5个优先等级 前台进程 可见进程 服务进程 后台进程
  • google.api.http

    Http 定义api服务的http配置 它包含一个httprule列表 每个列表指定一个rpc方法到一个或多个http rest api方法的映射 字段 描述 rules HttpRule 一个适用于各个API方法的http配置规则列表 注
  • 编译优化之 - 向量化优化入门

    1 介绍 2 Intel高级向量扩展 3 GCC中向量化 4 ICC中向量化 5 AOCC LLVM中向量化 1 介绍 什么是自动向量化 自动向量化 automatic vectorization 是自动并行化 automatic para
  • STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

    本文介绍如何用STM32F107VC Waveshare Open107V实验板 实现高精度的脉冲宽度计 占空比 开发环境 IDE STM32CubeIDE 1 8 固件库 STM32Cube FW F1 V1 8 4 函数发生 RIGOL
  • 人工智能开源社区论坛----开源助力多领域AI生态发展

    ChinaOSC 2022 人工智能开源社区论坛 开源助力多领域AI生态发展技术论坛将于2022年8月20日13 00 17 00在陕西省西安高新国际会议中心召开 本论坛将围绕 开源社区助力多领域AI生态发展 主题 邀请AI开源领域顶级技术
  • Filco圣手二代键盘蓝牙连接方法

    键盘前面的电源按钮按进去 即打开电源开关 同时按下Ctrl Alt Fn 看到蓝灯和红灯同时亮起 之后剩蓝灯闪烁 按下小键盘中数字键1 4中的一个 一共可以连4台设备 如果你选的数字之前连接过其他设备 可以在第2步做完之后先按两秒清除按钮
  • 托福综合写作套路

    1 文章认定 教授驳斥 2 The reading passage provides three possible functions of the carved stone balls However in the lecture the
  • 决策树算法原理+例题练习

    一 决策树的优缺点 优点 计算复杂度不高 输出结果易于理解 对中间值的缺失值不敏感 可以处理不相关特征数据 缺点 可能会产生过度匹配的问题 使用数据类型 数值型和标称型 二 一个实例 一天 老师问了个问题 只根据头发和声音怎么判断一位同学的
  • LSF的使用方法总结

    一 LSF 基本介绍 LSF Load Sharing Facility 是IBM旗下的一款分布式集群管理系统软件 负责计算资源的管理和批处理作业的调度 它给用户提供统一的集群资源访问接口 让用户透明地访问整个集群资源 同时提供了丰富的功能
  • 5.19 华为算法笔试经验

    华为机试一共三道题 对应的分值分别为100分 200分 300分 下面介绍这次笔试题目 第一题 一共有N个员工围成一个圆圈 分别是1 2 N每一个员工身上有对应数量的令牌 轮流从顺时针以及逆时针进行报数 顺时针报数周期为R 逆时针报数周期为