【Py/Java/C++/JS四种语言OD2023C卷真题】20天拿下华为OD笔试之【贪心+优先队列】2023C-贪心歌手【欧弟算法】全网注释最详细分类最全的华为OD真题题解

题目:20天拿下华为OD笔试之【贪心+优先队列】

给定一个正整数数组arr,代表每个工作的难度值。每个工作都可以选择立即开始或等待一天来完成。你需要找到最少的天数,在这些天数内可以完成所有工作。

注意:

  1. 完成工作的难度值总是大于等于完成它所需要的天数。
  2. 工作可以在任何非负整数时间点开始,但是必须连续完成。

例如:

输入:arr = [2, 4, 6, 8, 10]

输出:3

解释:可以选择在第1天,第2天,第4天完成工作。

输入:arr = [10, 15, 30, 20, 25]

输出:3

解释:可以选择在第1天,第2天,第4天完成工作。

输入:arr = [1, 2, 4, 5, 6, 7, 8, 9, 10]

输出:5

解释:可以选择在第1天,第2天,第4天,第5天,第10天完成工作。

请你设计一个算法,计算出最少需要的天数。

解决方案:

这是一个贪心加优先队列的问题。我们可以使用优先队列(最小堆)来保存工作,优先队列中的工作按照其完成的最早时间排序。然后我们从1开始迭代,如果当前有工作可以开始,我们就开始它。如果工作可以在当前这一天完成,我们就完成它。

以下是Python, Java, C++和JavaScript的解决方案:

Python:




from queue import PriorityQueue
 
def minDays(arr):
    pq = PriorityQueue()
    for work in arr:
        pq.put((work, 0))
    ans = 0
    while not pq.empty():
        day = 0
        while not pq.empty() and pq.queue[0][0] == day:
            work, _ = pq.get()
            day += work
        ans += 1
    return ans
 
# 测试代码
arr = [2, 4, 6, 8, 10]
print(minDays(arr))  # 输出:3

Java:




import java.util.PriorityQueue;
 
public class Solution {
    public int minDays(int[] arr) {
        PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);
        for (int work : arr) {
            pq.offer(new int[]{work, 0});
        }
        int ans = 0;
        while (!pq.isEmpty()) {
            int day = 0;
            while (!pq.isEmpty() && pq.peek()[0] == day) {
                int[] work = pq.poll();
                day += work[0];
            }
            ans++;
        }
        return ans;
    }
 
    // 测试代码
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] arr = {2, 4, 6, 8, 10};
        System.out.println(solution.minDays(arr));  // 输出:3
    }
}

C++:




#include <queue>
#include <vector>
 
using namespace std;
 
int minDays(vector<int>& arr) {
    priority_queue<pair<int, int>> pq;
    for (int work : arr) {
        pq.emplace(work, 0);
    }
    int ans = 0;
    while (!

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日