华为OD机考:OD统一考试D卷+C卷+A卷+B卷+刷题OJ
真题目录:华为OD机考机试 真题目录( D卷 +C卷 + B卷 + A卷) + 考点说明
在线OJ:点击立即刷题,模拟真实机考环境
华为OD面试真题精选:华为OD面试真题精选
题目描述
某部门计划通过结队编程来进行项目开发,已知该部门有 N 名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程,结队分组规则如下:
从部门中选出序号分别为 i、j、k 的3名员工,他们的职级分贝为 level[i],level[j],level[k],
结队小组满足 level[i] < level[j] < level[k] 或者 level[i] > level[j] > level[k],
其中 0 ≤ i < j < k < n。
请你按上述条件计算可能组合的小组数量。同一员工可以参加多个小组。
输入描述
第一行输入:员工总数 n
第二行输入:按序号依次排列的员工的职级 level,中间用空格隔开
备注:
- 1 ≤ n ≤ 6000
- 1 ≤ level[i] ≤ 10^5
输出描述
可能结队的小组数量
用例
输入 | 4 1 2 3 4 |
---|---|
输出 | 4 |
说明 | 可能结队成的组合(1,2,3)、(1,2,4)、(1,3,4)、(2,3,4) |
输入 | 3 5 4 7 |
---|---|
输出 | 0 |
说明 | 根据结队条件,我们无法为该部门组建小组 |
解题思路
主要思路:统计每个员工左侧和右侧的职级比较情况,然后利用这些信息来计算每个员工能够作为中间员工参与的队伍数量。
- 初始化四个数组,分别用于存储每个员工左侧和右侧职级小于和大于他的员工数量。
- 对于每个员工,遍历其左侧的所有员工,统计左侧职级小于和大于当前员工的数量。
- 对于每个员工,遍历其右侧的所有员工,统计右侧职级小于和大于当前员工的数量。
- 对于每个员工,计算其能够作为中间员工参与的队伍数量。这包括:
- 左侧职级小于他的员工数量乘以右侧职级大于他的员工数量。
- 左侧职级大于他的员工数量乘以右侧职级小于他的员工数量。
- 将每个员工作为中间员工能参与的队伍数量累加起来,得到总的队伍数量。
具体来说:
- 假设中间员工的职级大于左侧员工且小于右侧员工,那么:
- 如果左侧有
L
个员工的职级小于中间员工, - 并且右侧有
- 如果左侧有