华为软件类笔试-嵌入式软件开发 11-8

《嵌入式软件开发笔试与面试手册》https://blog.nowcoder.net/zhuanlan/jvN8gj

《软件开发笔试汇总》https://blog.nowcoder.net/zhuanlan/0oDWVm

3、手机芯片CPU任务调度

手机芯片的性能是有限的,因此手机芯片CPU的任务调度尤其重要。假设手机CPU所有需要处理的任务是一个完全二叉树,且每个任务的优先级不同,优先级按从高到低层级排列,相同一层的节点优先级一样。CPU需要优先处理优先级高的任务,同一层任务没有处理完前不能处理下一层的任务。CPU依次处理单个任务,每个节点值代表执行任务需要的时间。

给定一个有限的时间,及任务的完全二叉树,请编写一个函数,计算CPU最高利用率下可执行的任务个数,即优先保证CPU连续运行时间最长前提下,运行的任务最多。

解答要求

时间限制:C/C++1000ms,其他语言:2000ms

内存限制:C/C++256MB,其他语言:512MB

输入

第一行:给出任务完全二叉树的节点数,数值范围[0,1000]

第二行:任务组成的完全二叉树,广度遍历的序列值

第三行:CPU可执行的有限的时间值,数值范围[0,1000]

输出

CPU最高利用率下可执行的任务个数

 

样例1

输入:

7

1 2 3 4 5 6 6

15

输出:

5

解释:

有限的时间:15

输出:最高利用率可以处理5个任务1+2+3+4+5=15

样例2

输入:

7

1 2 3 3 4 5 9

19

输出:

5

解释:

有限的时间:19

输出:

最高利用率可以处理5个任务1+2+3+4+9=19

注意虽然1+2+3+3+4+5=18可以处理6个任务,但是CPU仅运行了18个时间,没有满足CPU连续运行时间最长的前提,因此不是最高利用率的选择。

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int maxTasks(const vector<int>& tasks, int availableTime) {
    int timeUsed = 0;
    int tasksDone = 0;
    int level = 0;
    int nodesInLevel = 1;

    for (int i = 0; i < tasks.size() && timeUsed + tasks[i] <= availableTime; ++level) {
        int nodesProcessed = 0; 
        int timeInLevel = 0; 

        while (nodesProcessed < nodesInLevel && i < tasks.size() && timeUsed + tasks[i] <= availableTime) {
            timeUsed += tasks[i];
            timeInLevel += tasks[i];
            tasksDone++;
            nodesProcessed++;
            i++;
        }

        if (nodesProcessed < nodesInLevel) {
            break;
        }

        nodesInLevel *= 2;
    }

    return tasksDone;
}

int main() {
    int n; 
    cin >> n;

    vector<int> tasks(n);
    for (int i = 0; i < n; ++i) {
        cin >> tasks[i];
    }

    int availableTime;
    cin >> availableTime;

    cout << maxTasks(tasks, availableTime) << endl;

    return 0;
}

1、找出作弊的人

公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。

过滤的规则为:找到分差最小的员工ID(p1,p2)列表,要求p1<p2

员工个数取值范国:O<n<100000

员工ID为整数,取值范围:0<=n<=100000

考试成绩为整数,取值范围:0<=score<=300

解答要求

时间限制:C/C++ 300ms,其他语言:600ms

内存限制:C/C++50MB,其他语言:10OMB

输入

员工的ID及考试分数

输出

分差最小的员工ID(p1,p2)列表,要求p1<p2。每一行代表一个集合,每个集合内的员工ID按顺序排列,多行结果也以员工对中p1值大小升序排列(如果p1相同则p2升序)

样例1

输入:

5

1 90

2 91

3 95

4 96

5 100

输出:

1 2

3 4

解释:

输入:

第一行为员工个数n,后续的n行第一个数值为员工ID,第二个数值为员工考试分数

输出:

员工1和员工2的分差为1,员工3和员工4的分差也为1,因此最终结果为

1 2

3 4

样例2

输入:

5

1 90

2 91

3 92

4 85

5 86

输出:

1 2

2 3

4 5

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论

相关推荐

10-25 18:14
门头沟学院 Java
之前数字能源9.27笔试挂了,想转投终端部,求hr捞
aloffer:别终端了,终端炸死了,人多的要死
投递华为等公司10个岗位 >
点赞 评论 收藏
分享
10-23 21:36
门头沟学院 C++
比亚迪 应用软件开发 24-27万
点赞 评论 收藏
分享
10-26 15:53
已编辑
蚌埠坦克学院 C++
10月21号&nbsp;早10点钟&nbsp;专业一面(约45min)自我介绍,介绍一下科研情况(自己的专利保护内容有哪些?如何保证专利保护内容不被“剽窃”?)介绍项目,深挖项目,项目有哪些难点?为什么觉得这个是难点?项目中使用了Redis,使用了其中的什么数据结构?存储了什么数据?以及数据有何用处?(还问了一些数据处理的具体细节)项目中使用的mysql,介绍一下项目中有哪些表?复盘笔试第一题,解释一下并查集。力扣手撕,下一个更大元素(力扣503)10月21号&nbsp;晚7点钟&nbsp;专业二面(约50min)自我介绍,介绍一下科研情况(介绍一下论文内容,做了什么?)介绍简历上的项目,深挖项目,第一个项目中使用了Redis,使用了其中的什么数据结构?存储了什么数据?以及数据有何用处?项目中使用的mysql,介绍一下项目中有哪些表?把你了解的MySQL的内容都说出来,做两个程序内容的选择题,并解释原因?(面试官人很好,给了提示)力扣手撕,面试官随机选一个力扣题目。反问:部门具体业务内容(面试官介绍的很详细,接近10min)10月25日&nbsp;早10点&nbsp;主管面(约35min)正常主管面,没有很压力,主管很有耐心。许愿能过10月25晚&nbsp;11点45收到面评邮件10月26日&nbsp;主管面通过,入池 #华为求职进展汇总# #华为# #2012实验室#
点赞 评论 收藏
分享
点赞 6 评论
分享
牛客网
牛客企业服务