【2024华为OD-E卷-100分-boss的收入】(题目+思路+Java&C++&Python解析)

题目描述

题目:boss的收入

在一个公司中,有一个老板(boss)和若干名员工(employees)。老板和员工的收入信息存储在一个数组中,其中数组的每个元素表示一个人的收入。数组的第0个元素表示老板的收入,后续元素依次表示员工的收入。

你的任务是计算老板的收入在所有员工收入中的排名(从高到低)。如果老板的收入有多个相同的值,则排名的顺序按照第一次出现的最高收入开始计算。例如,如果员工的收入是 [100, 200, 200, 300],那么排名为:

  • 第1名:300
  • 第2名:200(第一个出现的200)
  • 第3名:200(第二个出现的200)
  • 第4名:100

老板的收入排名就是他在员工收入排序后的位置(从1开始计数)。

输入

  • 一个整数数组 incomes,其中 incomes[0] 是老板的收入,incomes[1:] 是员工的收入。

输出

  • 一个整数,表示老板的收入在员工收入中的排名。

示例

  • 输入:[500, 300, 200, 100, 400, 500]
  • 输出:2
  • 解释:员工的收入排序后为 [500, 400, 300, 200, 100],老板的收入 500 排名为第2(因为有一个相同的500在员工中,但它是第一个)。

思路

  1. 提取员工收入 :将员工收入从数组中提取出来,存储在另一个数组中。
  2. 排序员工收入 :对员工收入数组进行从高到低的排序。
  3. 查找老板收入排名 :遍历排序后的员工收入数组,找到老板收入第一次出现的位置,并计算其排名。

Java 代码解析

import java.util.Arrays;

public class BossIncomeRank {
public static int findBossIncomeRank(int[] incomes) {
// 提取员工收入
int[] employeeIncomes = Arrays.copyOfRange(incomes, 1, incomes.length);

// 排序员工收入(从高到低)
Arrays.sort(employeeIncomes);
for (int i = 0; i < employeeIncomes.length / 2; i++) {
int temp = employeeIncomes[i];
employeeIncomes[i] = employeeIncomes[employeeIncomes.length - 1 - i];
employeeIncomes[employeeIncomes.length - 1 - i] = temp;
}

// 查找老板收入排名
int bossIncome = incomes[0];
int rank = 1;
for (int income : employeeIncomes) {
if (income == bossIncome) {
return rank;
}
rank++;
}
// 如果老板收入在所有员工收入之上,则排名为员工人数 + 1
return employeeIncomes.length + 1;
}

public static void main(String[] args) {
int[] incomes = {500, 300, 200, 100, 400, 500};
System.out.println(findBossIncomeRank(incomes)); // 输出:2
}
}

C++ 代码解析

#include <iostream>
#include <vector>
#include <algorithm>

int findBossIncomeRank(std::vector<int>& incomes) {
// 提取员工收入
std::vector<int> employeeIncomes(incomes.begin() + 1, incomes.end());

// 排序员工收入(从高到低)
std::sort(employeeIncomes.rbegin(), employeeIncomes.rend());

// 查找老板收入排名
int bossIncome = incomes[0];
int rank = 1;
for (int income : employeeIncomes) {
if (income == bossIncome) {
return rank;
}
rank++;
}
// 如果老板收入在所有员工收入之上,则排名为员工人数 + 1
return employeeIncomes.size() + 1;
}

int main() {
std::vector<int> incomes = {500, 300, 200, 100, 400, 500};
std::cout << findBossIncomeRank(incomes) << std::endl; // 输出:2
return 0;
}

Python 代码解析

def find_boss_income_rank(incomes):

提取员工收入

employee_incomes = incomes[1:]

排序员工收入(从高到低)

employee_incomes.sort(reverse=True)

查找老板收入排名

boss_income = incomes[0]
rank = 1
for income in employee_incomes:
if income == boss_income:
return rank
rank += 1

如果老板收入在所有员工收入之上,则排名为员工人数 + 1

return len(employee_incomes) + 1

测试

incomes = [500, 300, 200, 100, 400, 500]
print(find_boss_income_rank(incomes)) # 输出:2

相关推荐
轻口味1 小时前
【每日学点HarmonyOS Next知识】tab对齐、相对布局、自定义弹窗全屏、动画集合、回到桌面
华为·harmonyos·harmonyosnext
yyytucj3 小时前
多用户MIMO预编码技术的对比
算法·预编码算法
软件算法开发4 小时前
基于卡尔曼滤波的雷达光电多目标航迹融合算法matlab仿真
算法·matlab·卡尔曼滤波·雷达光电·多目标航迹融合
吐泡泡科技5 小时前
MATLAB风光柴储微网粒子群算法
算法·matlab·粒子群算法·风光柴储微网
不吃元西5 小时前
leetcode top100矩阵题73.54.48.240
算法·leetcode·矩阵
subject625Ruben5 小时前
Matlab多种算法解决未来杯B的多分类问题
人工智能·算法·机器学习·数学建模·matlab·分类·未来杯
小学生波波6 小时前
鸿蒙APP采用WebSocket实现在线实时聊天
websocket·华为·harmonyos·arkts·鸿蒙·实时聊天·在线聊天
hy____1236 小时前
字符串函数和结构题内存对齐
c语言·算法
轻口味6 小时前
【每日学点HarmonyOS Next知识】路由栈问题、图片圆角、颜色资源转十六进制字符串、数据集变化崩溃、组件声明周期
华为·harmonyos·harmonyosnext