华为机试:找到比自己强的人数

题目解析

题目描述

在这里插入图片描述

题目分析

在这里插入图片描述
在这里插入图片描述

class Solution{

public:
    int process(std::vector<std::vector<int>> &arr){
        std::map<int, int> map;
        for (int i = 0; i < arr.size(); ++i) {
            int teacher = arr[i][0];
            for (int j = 0; j < arr.size(); ++j) {
                int student = arr[j][1];
                if(teacher > student){
                    map[teacher] += 1;
                    map[student] += 0;
                }
            }

        }


        std::string ans;
        for(auto iter : map){
            ans = ans.empty() ? std::to_string(iter.second) : ans + "," + std::to_string(iter.second);
        }

        std::cout << ans << "\n";
    }
};

### 关于OD中的高效任务规划算法华为OD中,涉及的任务规划类问题通常需要综合运用贪心算法、动态规划以及优先队列等技术来解决。以下是针对此类问题的一个通用解决方案框架。 #### 1. **问题分析** 高效任务规划的核心在于如何合理分配资源或时间以达到最优解。这类问题一般具有以下特点: - 输入数据规模较大(如 `n` 的范围为 `[1, 10000]`),因此需考虑算法的时间复杂度。 - 可能存在约束条件(如能力值范围 `[1000, 100000]` 或其他参数限制)[^1]。 对于具体实现,可以采用如下方法: #### 2. **贪心算法的应用** 如果问题是基于局部最优策略构建全局最优解,则可尝使用贪心算法。例如,在排队游戏中,可以通过每次选取当前最符合条件的学生来减少整体计算量。 ```python def greedy_task_allocation(students, threshold): students.sort(reverse=True) # 按照能力值降序排列 count = 0 for student in students: if student >= threshold: count += 1 else: break return count ``` 上述代码展示了如何利用排序后的学生列表快速找到满足阈值要求的人数。 #### 3. **动态规划的引入** 当面临多阶段决策过程时,动态规划可能是更合适的选择。它通过记录子问题的结果避免重复计算,从而提高效率。 假设我们需要在一个固定时间内完成尽可能多的任务,每项任务有其耗时和收益: ```python def dp_task_scheduling(tasks, total_time): tasks.sort(key=lambda x: x['profit'] / x['time'], reverse=True) dp = [0] * (total_time + 1) for task in tasks: time_needed = task['time'] profit_gained = task['profit'] for t in range(total_time, time_needed - 1, -1): dp[t] = max(dp[t], dp[t - time_needed] + profit_gained) return dp[-1] ``` 此函数实现了经典的背包问题变体版本,其中每个任务相当于一件物品[^2]。 #### 4. **优化技巧** 为了进一步提升性能,还可以结合二分查找或者堆结构来进行加速操作。比如维护一个小顶堆始终保存当前未处理的最大几个候选者即可迅速定位最佳选项之一。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值