【2024华为OD-E卷-100分-boss的收入】(题目+思路+JavaC++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在员工中,但它是第一个)。
思路
- 提取员工收入:将员工收入从数组中提取出来,存储在另一个数组中。
- 排序员工收入:对员工收入数组进行从高到低的排序。
- 查找老板收入排名:遍历排序后的员工收入数组,找到老板收入第一次出现的位置,并计算其排名。
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