【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,其中 incomes0 是老板的收入,incomes1: 是员工的收入。

输出

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

示例

  • 输入: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 = employeeIncomesi;
employeeIncomesi = employeeIncomesemployeeIncomes.length - 1 - i;
employeeIncomesemployeeIncomes.length - 1 - i = temp;
}

// 查找老板收入排名
int bossIncome = incomes0;
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 = incomes0;
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 = incomes1:

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

employee_incomes.sort(reverse=True)

查找老板收入排名

boss_income = incomes0
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

相关推荐
江畔柳前堤7 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Doraemomo7 小时前
数据结构-环形链表
java·数据结构·链表
Forever Nore8 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考10 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX10 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面11 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号11 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽11 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI11 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
MC皮蛋侠客13 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis