华为 软开 3道题

# 1、完全二叉树的中序遍历

题目
    给定两个正整数 n 和 m
    要求生成一棵完全二叉树,满足 左子叶 < 父节点 < 右子叶,节点值为 1~n
    在这颗树中搜索 m,输出搜索路径,标准如下:
        首先输出 S,表示搜索根节点,然后如果搜索 左/右子叶 则输出 L/R
        最终搜索成功则输出 Y,失败则输出 N

思路
    模拟生成树(复杂)和模拟搜索(简单)即可
        生成时先生成一个特殊的最小堆(父节点 < 左子叶 < 右子叶)
            然后依次遍历,交换不满足条件的节点
        搜索时将 m 与当前节点比较,若m小/大则搜索左/右子叶节点

# 2、足球队员排序

题目
    给出两个正整数 n 和 m
    给出 n 个球员各射门 m 次的结果
    1表示进球,0表示射失
    要求按照如下标准对其进行排序
        1. 首先比较总进球数,多的靠前,若相等继续比较下一条
        2. 其次比较最多连续进球数,多的靠前,若相等继续比较下一条
        3. 然后比较第一次射失时射门次数,多的靠前,若相等继续比较第二次,以此类推,若均相等则比较下一条
        4. 最后比较队员编号,小的靠前

思路
    模拟排序
        第一个标准可以利用 ’统计一个二进制数中 1 的个数‘ 的函数
        第二个标准用 双指针/滑动窗口 可以解决
        第三个标准最难,本质上可以直接比较两个二进制数的大小,越大的数说明射失时射门次数更多,即二进制数前面的 1 更多

注意
    可以利用 sort 函数的变体,即排序后返回 下标 而不是返回 值

# 3、图中环的 H 指数

题目
    给出一个正整数 n,表示图中有 n 个节点
    给出一个长度为 n-1 的数组 a,表示从 i 节点到 a[i] 节点有一条边
    定义图中一个环的 H 指数 = V 指数 - G 指数
        其中 V指数 为环中节点个数
        G 指数为 图中与环连通 但是不在环中的节点数量
    要求依次输出 H 指数最大的环中的节点
        H 指数最大的不止一个环时,比较 V 指数,然后比较节点编号

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值