当前位置: 首页 > article >正文

【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在员工中,但它是第一个)。

思路

  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


http://www.kler.cn/a/473068.html

相关文章:

  • 推动多语言语音科技迈向新高度:INTERSPEECH 2025 ML-SUPERB 2.0 挑战赛
  • Redis 笔记(二)-Redis 安装及测试
  • 【实用技能】如何使用 .NET C# 中的 Azure Key Vault 中的 PFX 证书对 PDF 文档进行签名
  • 使用Registry explore实现法医检查练习
  • 数据库中锁与ETL的故障排除和性能优化
  • unity 播放 序列帧图片 动画
  • 【并发篇】CompletableFuture学习
  • JavaScript 正则表达式
  • 代码随想录算法训练营第1天(数组1)| 704. 二分查找、27. 移除元素、977.有序数组的平方
  • 【数据库】SQL相关知识点总结1(数据库约束、三大范式、关系模型、聚合函数)
  • 为什么页面无法正确显示?都有哪些HTML和CSS相关问题?
  • PHP语言的函数实现
  • svelte5中使用react组件
  • 跨界融合:人工智能与区块链如何重新定义数据安全?
  • MATLAB语言的软件工程
  • c#13新特性
  • 推动多语言语音科技迈向新高度:INTERSPEECH 2025 ML-SUPERB 2.0 挑战赛
  • JAVA常见问题解答
  • 【LeetCode Hot100 贪心算法】 买卖股票的最佳时机、跳跃游戏、划分字母区间
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/08】小测-【第8章 STP生成树协议】理论和实操
  • 【Linux】shell脚本编程
  • 详解opencv resize之INTER_LINEAR和INTER_AREA
  • 用户注册模块(芒果头条项目进度4)
  • JVM三JVM虚拟机
  • 战地雷达通信系统中无人机与特种车辆智能组网及雷达通信一体化研究报告
  • UE蓝图节点备忘录