【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

    作者:执着的小火车

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【2024华为OD-E卷-100分-boss的收入】(题目+思路+Java&C++&Python解析)

    发表回复