华为OD机试真题C卷-篇6

100分值题

  • 宽度最小的子矩阵
  • 部门人力分配
  • 电脑病毒感染
  • 会议室占用时间段

宽度最小的子矩阵

  • 给定一个n行 * m列的矩阵;
  • 给定一个k个整数的数组k_list;
  • 在n*m的矩阵中找一个宽度最小的子矩阵,该子矩阵包含k_list中所有的整数;
    输入描述:
    第一行输入n,m 两个整数;
    后续n行每行输入 m个数据;
    输入k值;
    输入个整数
    输出描述:
    最小宽度值,若找不到,则输出-1

示例1
输入:
2 5
1 2 2 3 1
2 3 2 3 2
3
1 2 3
输出:
2
说明,
矩阵第0、3列包含了1、2、3;
矩阵第3、4列包含了1、2、3

示例2
输入:
2 5
1 2 2 3 1
1 3 2 3 4
3
1 1 4
输出:
5
思路:

  • 滑动的子矩阵
  • 从第一列起始,找一个宽度最小的子矩阵;
  • 从第二列开始,找一个宽度最小的子矩阵;
  • 依次到最后一列…
  • 以上的宽度每次取最小值
 
class MinWidth:def solution(self, n, m, matrix, k_list):k_dict = self.to_dict(k_list)min_width = float("inf")# 类似双指针for start_idx in range(m):for end_idx in range(start_idx, m):temp_list = []# 获取当前子矩阵的所有元素for i in range(n):temp_list.extend(matrix[i][start_idx:end_idx+1])temp_dict = self.to_dict(temp_list)# 集合操作flag = Truefor key in k_dict:if key in temp_dict and k_dict[key] <= temp_dict[key]:continueelse:flag = Falsebreakif flag:min_width = min(min_width, end_idx - start_idx + 1)breakprint(min_width)def to_dict(self, alist):dict_ = {}for i in alist:dict_[i] = dict_.get(i, 0) + 1return dict_if __name__ == '__main__':min_width = MinWidth()while True:try:n, m = list(map(int, input().strip().split()))matrix = []for i in range(n):matrix.append(list(map(int, input().strip().split())))k = int(input().strip())k_list = list(map(int, input().strip().split()))min_width.solution(n, m, matrix, k_list)except KeyboardInterrupt:break

&nbsp

部门人力分配

  • requirements表示开发需求数组,每个值表示当前需求的月数,所有需求需要在m个月内完成;
  • 每个月最多有2个需求完成开发;人力安排后每个月人力是固定的;
  • 在满足需求开发进度的情况下,每个月需要的最小人力是多少?
    输入描述:
    第一行输入m
    第二行输入requirements 数组, 值>=1 长度为n;
    1<=n/2<=m<=n<=10000
    输出描述:
    输出部门需要的人力?

示例1
输入:
3
3 5 3 4
输出:
6
说明:
开发时间为5个月的需求在一个月内完成,则需要5个人;
3 3 合并到一个月完成,需要6个人力;
3 4合并到一个月完成,需要7个人力;
4 5合并到一个月完成,需要9个人力;

示例2
输入:
3
3 3 4 5 6
输出:
8

示例3
输入:
3
3 3 4 5 6 2
输出:

思路:

  • n个需求,n个月完成需要的人力较少,m个月完成人力增加;
  • n个需求在m个月内完成,当n==m时,取requirements的最大值;
  • n>m时,requirements升序排序,依次取出不需要合并的最大值放入temp_list,直到n==m的情况;
    • 剩余需要合并的数对,利用双指针进行两两合并(最大值组合一个最小值),求的和放入temp_list;
    • 最终 temp_list 长度会等于m,此时取temp_list的最大值即可;

class LeastResource:def solution(self, requirements, m):n = len(requirements)requirements.sort()temp_list = []if n == m:result = max(requirements)print(result)else:while n / 2 < m:temp_list.append(requirements.pop())n -= 1m -= 1# 剩余需求 需要两两组合self.merge(temp_list, requirements)result = max(temp_list)print(result)def merge(self, temp_list, requirements):cur_n = len(requirements)pre = 0cur = cur_n - 1while pre < cur:cur_sum = requirements[pre] + requirements[cur]temp_list.append(cur_sum)pre += 1cur -= 1if __name__ == '__main__':least_resource = LeastResource()while True:try:m = int(input().strip())requirements = list(map(int, input().strip().split()))least_resource.solution(requirements, m)except KeyboardInterrupt:break

二分法
最小人力范围在requirements的最大值—最大值+次最大值 之间;

m = int(input())
nums = [int(x) for x in input().split(" ")]
nums.sort()def cal(k, nums, length) :low = 0high = length - 1months = 0while (True) :if(low > high):breakelse :if (nums[low] + nums[high] > k) :high -= 1else :low += 1high -= 1months+=1return monthslow = nums[len(nums)-1]
high = nums[len(nums)-1] + nums[len(nums)-2]result = -1
while (True) :if(low > high):breakelse :k = int((low + high) / 2)if (cal(k, nums, len(nums)) <= m) :high = k - 1result = kelse :low = k + 1
print(result)

 

电脑病毒感染

  • 一个局域网内有n台电脑,编号为 0 -> n-1,电脑之间病毒感染时间用t表示;
  • 现在网络内已有一台电脑被病毒感染;
  • 求其感染所有其他电脑最少的时间,若最后有电脑不会感染,则返回-1;
  • 数组times 表示一台电脑把相邻的电脑感染所用的时间;
  • path[i] = {i, j, t} 表示 电脑i 感染 电脑j 所用的时间t;
    输入描述:
    第一行输入n 在[1, 200]
    第二行输入m, 表示m条网络;
    后m行,每行输入i,j,t, 1<=i,j<=n
    最后一行输入携带病毒的电脑编号;
    输出描述:
    感染全部电脑的最少时间,不能感染全部输出-1

示例1
输入:
4
3
2 1 1
2 3 1
3 4 1
2
输出:
2

思路

  • 单源最短路径
 
n = int(input())
count = int(input())
time = [float('inf') for i in range(n)]matrix=[[0 for i in range(3)] for j in range(count)]
for j in range(count):nums = [int(x) for x in input().split(" ")]matrix[j][0] = nums[0] matrix[j][1] =nums[1]matrix[j][2] = nums[2]start = int(input())
time[start-1] = 0for i in range(n):for j in range(count):   if (time[matrix[j][0]-1] + matrix[j][2] < time[matrix[j][1]-1]) :time[matrix[j][1]-1] = time[matrix[j][0]-1] + matrix[j][2]result = 0
i=0
while(True):if(i>=n):print(result)breakelse :if (time[i] == float('inf')) :print(-1)breakif(time[i]>result):result = time[i]i+=1

 

会议室占用时间段

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

 
meetings = [[1,4], [2,5],[7,9], [14,18]]
def merge(meetings) :sorted(meetings,key=lambda x: (x[1],x[0]))result = []result.append(meetings[0])cur = result[0]i=1while(True):if(i>=len(meetings)):breakelse :if (cur[1] >= meetings[i][0] and cur[1] <= meetings[i][1]) :cur[1] = meetings[i][1]elif(cur[1] > meetings[i][1]):passelse :result.append(meetings[i])cur = meetings[i]i+=1print(result)return result
merge(meetings)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目管理:高效推动项目成功的关键

项目管理&#xff1a;高效推动项目成功的关键 在当今竞争激烈的商业环境中&#xff0c;项目管理已成为企业实现目标和取得成功的关键因素。有效的项目管理不仅能够确保项目按时完成&#xff0c;还能在预算范围内达到预期的质量标准。本文将探讨项目管理的重要性、关键环节以及…

Maven安装并配置本地仓库

一、安装Maven 1.下载链接 Maven官网下载链接 Binary是可执行版本&#xff0c;已经编译好可以直接使用。 Source是源代码版本&#xff0c;需要自己编译成可执行软件才可使用。 tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是同样的,只是压缩格式不同 tar.gz格…

Stable Video文本生成视频公测地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI发布了首个开放视频模型——"Stable Video"&#xff0c;该创新工具能够将文本和图像输入转化为生动的场景&#xff0c;将概念转换成动态影像&#xff0c;生成出电影级别的作品&#xff0c;旨在满足广泛的视频应用需求&#xff0c;包括媒…

STM32 DMA入门指导

什么是DMA DMA&#xff0c;全称直接存储器访问&#xff08;Direct Memory Access&#xff09;&#xff0c;是一种允许硬件子系统直接读写系统内存的技术&#xff0c;无需中央处理单元&#xff08;CPU&#xff09;的介入。下面是DMA的工作原理概述&#xff1a; 数据传输触发&am…

解决Java并发问题的常见思路

写在文章开头 近期对一些比较老的项目进行代码走查&#xff0c;碰到一些极端的并发编程恶习&#xff0c;所以笔者就基于此文演示这类问题以及面对并发编程时我们应该需要了解一些常见套路。 Hi&#xff0c;我是sharkChili&#xff0c;是个不断在硬核技术上作死的java coder&am…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介绍 Stable Diffusion 作为当下最流行的开源 AI 图像生成模型在游戏行业有着广泛的应用实践&#xff0c;无论是 ToC 面向玩家的游戏社区场景&#xff0c;还是 ToB 面向游戏工作室的美术制作场景&#xff0c;都可以发挥很大的价值&#xff0c;如何更好地使用 Stable Dif…

基于SpringBoot的教师考勤管理系统(赠源码)

作者主页&#xff1a;易学蔚来-技术互助文末获取源码 简介&#xff1a;Java领域优质创作者 Java项目、简历模板、学习资料、面试题库 教师考勤管理系统是基于JavaVueSpringBootMySQL实现的&#xff0c;包含了管理员、学生、教师三类用户。该系统实现了班级管理、课程安排、考勤…

基于springboot的足球俱乐部管理系统的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 课题…

npm ERR! code ERESOLVE

1、问题概述&#xff1f; 执行npm install命令的时候报错如下&#xff1a; tangxiaochuntangxiaochundeMacBook-Pro stf % npm install npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resol…

LeetCode102.二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]输入&#xff1a;root [1] 输出&am…

SpringCloud-MQ消息队列

一、消息队列介绍 MQ (MessageQueue) &#xff0c;中文是消息队列&#xff0c;字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。消息队列是一种基于生产者-消费者模型的通信方式&#xff0c;通过在消息队列中存放和传递消息&#xff0c;实现了不同组件、服务或系统…

2024全新手机软件下载应用排行、平台和最新发布网站,采用响应式织梦模板

这是一款简洁蓝色的手机软件下载应用排行、平台和最新发布网站&#xff0c;采用响应式织梦模板。 主要包括主页、APP列表页、APP详情介绍页、新闻资讯列表、新闻详情页、关于我们等模块页面。 地 址 &#xff1a; runruncode.com/php/19703.html 软件程序演示图&#xff1a;…

最小高度树-力扣(Leetcode)

题目链接 最小高度树 思路&#xff1a;本质上是找到树中的最长路径。当最长路径上中间点&#xff08;若路经长为偶数&#xff0c;则中间点仅有一个&#xff0c;否者中间点有两个&#xff09;作为根时&#xff0c;此时树高最小。 Code: class Solution { public://拓扑排序int…

【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 深度优先搜索 LeetCode2003. 每棵子树内缺失的最小基因值 有一棵根节点为 0 的 家族树 &#xff0c;总共包含 n 个节点&#xff0c;节点编号为 0 到 n - 1 。给你一个下标从 0 开始的整数数组 parents &#xff0c;其中…

第二讲:用geth和以太坊交互

一&#xff1a;安装geth brew install ethereum geth github网址&#xff1a; https://github.com/ethereum/go-ethereum 二&#xff1a; 用geth连接以太坊 以太坊有主网络&#xff08;Ethereum Mainnet&#xff09;&#xff0c;有测试网络&#xff08;Sepolia、Goerli 等等…

【分块三维重建】【slam】LocalRF:逐步优化的局部辐射场鲁棒视图合成(CVPR 2023)

项目地址&#xff1a;https://localrf.github.io/ 题目&#xff1a;Progressively Optimized Local Radiance Fields for Robust View Synthesis 来源&#xff1a;KAIST、National Taiwan University、Meta 、University of Maryland, College Park 提示&#xff1a;文章用了s…

如何将一个远程git的所有分支推到另一个远程分支上

如何将一个远程git的所有分支推到另一个远程分支上 最初有 12 个分支 执行 git remote add 远程名 远程git地址 git push 远程名 --tags "refs/remotes/origin/*:refs/heads/*"之后就变成 26个分支

小项目:2024/3/2

一、TCP机械臂测试 代码&#xff1a; #include <myhead.h> #define SER_IP "192.168.125.254" //服务器端IP #define SER_PORT 8888 //服务器端端口号#define CLI_IP "192.168.199.131" //客户端IP #define CLI_P…

面试笔记系列八之JVM基础知识点整理及常见面试题

目录 类实例化加载顺序 类的实例化顺序 JVM创建对象的过程 JVM的运行机制 直接内存&#xff08;Direct Memory&#xff09; JVM后台运行的线程 JVM 常用参数 标准参数中比较有用的&#xff1a; 非标准参数又称为扩展参数&#xff0c;比较有用的是 非Stable参数 class初…

【DAY07 软考中级备考笔记】数据结构:线性结构,数组矩阵和广义表

数据结构&#xff1a;线性结构&#xff0c;数组矩阵和广义表 3月2日 – 天气&#xff1a;晴 1. 线性表的定义和存储方式 > 这一部分只需要掌握下面的两点即可&#xff1a; > > * 采用顺序存储和链式存储的特点 > * 单链表的插入和删除操作 2. 栈和队列 > 这里需…