执行时长 - 华为OD统一考试

news/2024/7/20 19:14:13 标签: 华为od, 算法, java, python, c++, 面试, 机试

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。

假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成。

输入描述

第一个参数为GPU一次最多执行的任务个数,取值范围[1, 10000]

第二个参数为任务数组长度,取值范围[1, 10000]

第三个参数为任务数组,数字范围[1, 10000]

输出描述

执行完所有任务最少需要多少秒。

示例1

输入:
3
5
1 2 3 4 5

输出:
6

说明:
一次最多执行 3 个任务,最少耗时 6s。

示例2

输入:
4
5
5 4 1 1 1

输出:
5

说明:
一次最多执行 4 个任务,最少耗时 5s。

题解

这个问题可以使用贪心策略来解决。

主要思路是遍历任务数组,每秒执行尽可能多的任务,然后根据剩余任务数量计算等待时间。

Java

java">import java.util.Scanner;
/**
 * @author code5bug
 */
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 最多一次执行任务数, 任务长度
        int n = scanner.nextInt(), taskLength = scanner.nextInt();

        // 任务列表
        int[] tasks = new int[taskLength];
        for (int i = 0; i < taskLength; i++) {
            tasks[i] = scanner.nextInt();
        }

        // 等待的任务数量
        int waitNum = 0;
        for (int taskNum : tasks) {
            // 每秒最多n个任务,执行不完则等待后续执行
            waitNum = Math.max(0, waitNum + taskNum - n);
        }

        // 计算任务执行完成
        // (waitNum + n - 1) / n  向上取整
        int costTime = taskLength + (waitNum + n - 1) / n;

        System.out.println(costTime);
    }
}


Python

python"># 最多一次执行任务数
n = int(input())
task_length = int(input())
tasks = list(map(int, input().split()))

# 等待的任务数量
wait_num = 0
for task_num in tasks:
    # 每秒最多n个任务, 执行不完则等待后续执行
    wait_num = max(0, wait_num + task_num - n)

# 计算任务执行完成
# (wait_num + n - 1) // n    向上取整的写法
cost_time = task_length + (wait_num + n - 1) // n
print(cost_time)

C++

#include <iostream>
#include <vector>

using namespace std;

int main() {
    // 最多一次执行任务数, 任务长度
    int n, taskLength;
    cin >> n >> taskLength;

    // 任务列表
    vector<int> tasks(taskLength);
    for (int i = 0; i < taskLength; i++) {
        cin >> tasks[i];
    }

    // 等待的任务数量
    int waitNum = 0;
    for (int taskNum : tasks) {
        // 每秒最多n个任务,执行不完则等待后续执行
        waitNum = max(0, waitNum + taskNum - n);
    }

    // 计算任务执行完成
    int costTime = taskLength + (waitNum + n - 1) / n;

    cout << costTime << endl;

    return 0;
}

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏


http://www.niftyadmin.cn/n/5366739.html

相关文章

LeetCode 第28天

93. 复原 IP 地址 这题挺难的&#xff0c;实际上我觉得分割字符串的题都挺难的&#xff0c;即使知道了回溯算法&#xff0c;也是无从下手。因为要对字符串进行处理&#xff0c;关于分割点不知道怎么处理。关键部分理解在代码里。 class Solution { private: // 判断分割的子串…

Kotlin 的 Flow 简单使用

当使用 Kotlin 的 Flow 处理异步数据流时&#xff0c;可以遵循以下步骤。Flow 提供了一种声明式、异步和可组合的处理异步数据的方式。 创建 Flow Flow 是使用 flow 构建器创建的。有两种主要的创建方式&#xff1a;使用 flowOf 和使用 asFlow。 1 flowOf&#xff1a; 从多个…

【力扣】Z字形变换,模拟+直接构造

Z字形变换原题地址 方法一&#xff1a;利用二维矩阵模拟 对于特殊情况&#xff0c;z字形变换后只有一行或只有一列&#xff0c;则变换后的字符串和原字符串相同。 对于一般情况&#xff0c;我们可以考虑按照题目要求&#xff0c;把字符串按照Z字形存储到二维数组中&#xff…

1g的视频怎么压缩到200m?3个步骤解决~

把1G的文件压缩到200M&#xff0c;可以有效节省存储空间&#xff0c;加快传输速度&#xff0c;在某些情况下&#xff0c;压缩文件可以提供更好的安全性&#xff0c;例如通过加密或压缩算法保护文件内容。下面就向大家介绍3个好用的方法。 方法一&#xff1a;使用嗨格式压缩大师…

springboot157基于springboot的线上辅导班系统的开发与设计

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【机器学习】机器学习简单入门

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;matplotlib &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

synchoronized 为什么不能锁 int 或者 long 类型

前言 synchronized(Object) 不能用String常量 因为字符串常量是在内存中同一个地方。如果两个线程锁一个&#xff0c;可能导致死锁。一个线程多次可能导致重入。 也不能用Integer&#xff0c;Long等基础类型。 因为当锁定int或者long时&#xff0c; jvm就会调用Interger.valu…

python下字符串操作

目录 一&#xff1a;连接字符串 二&#xff1a;字符串切片 三&#xff1a;字符串查找 四&#xff1a;字符串替换 五&#xff1a;字符串大小写转换 六&#xff1a;字符串分割 七&#xff1a;字符串去除空格和特殊字符 八&#xff1a;字符串长度 九&#xff1a;检查字符…