5.19 华为算法笔试经验

华为机试一共三道题,对应的分值分别为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<
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值