华为OD机试之处理器问题(Java源码)

news2024/11/19 4:16:43

处理器问题

题目描述

某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。
编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信。
如下图所示。现给定服务器可用的处理器编号数组array,以及任务申请的处理器数量num,找出符合下列亲和性调度原则的芯片组合。
如果不存在符合要求的组合,则返回空列表。
亲和性调度原则:
-如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。
-如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。
-如果申请处理器个数为4,则必须选择同一链路剩余可用的处理器数量为4个。
-如果申请处理器个数为8,则申请节点所有8个处理器。
提示:
任务申请的处理器数量只能是1、2、4、8。\n编号0-3的处理器处于一个链路,编号4-7的处理器处于另外一个链路。
处理器编号唯一,且不存在相同编号处理器。

输入描述

输入包含可用的处理器编号数组array,以及任务申请的处理器数量num两个部分。
第一行为array,第二行为num。例如:
[0, 1, 4, 5, 6, 7] 1
表示当前编号为0、1、4、5、6、7的处理器可用。任务申请1个处理器。
0 <= array.length <= 8
0 <= array[i] <= 7
num in [1, 2, 4, 8]

输出描述

输出为组合列表,当array=[0,1,4,5,6,7],num=1 时,输出为[[0], [1]]

输入[0, 1, 4, 5, 6, 7]
1
输出[[0], [1]]
说明

根据第一条亲和性调度原则,在剩余两个处理器的链路(0, 1, 2, 3)中选择处理器。

由于只有0和1可用,则返回任意一颗处理器即可。

输入[0, 1, 4, 5, 6, 7]
4
输出[[4, 5, 6, 7]]
说明根据第三条亲和性调度原则,必须选择同一链路剩余可用的处理器数量为4个的环

解析

可以把亲和性调度原则封装为一个Map集合。如下
在这里插入图片描述

Java源码示例

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class T23 {

	public static void main(String[] args) {
		String input = "0,1,4,5,6,7";
		int applyNum = 1;
		String[] cArr = input.split(",");
		List<Integer> link1 = new ArrayList<Integer>();
		List<Integer> link2 = new ArrayList<Integer>();
		for (String item : cArr) {
			int num = Integer.parseInt(item);
			if (num <= 3) {
				link1.add(num);
			} else {
				link2.add(num);
			}
		}
		System.out.println(link1);
		System.out.println(link2);
		/**
		 * -如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。
		 * -如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。
		 * -如果申请处理器个数为4,则必须选择同一链路剩余可用的处理器数量为4个。 -如果申请处理器个数为8,则申请节点所有8个处理器。
		 */
		Map<Integer, Integer[]> map = new HashMap<Integer, Integer[]>();
		Integer[] pri1 = { 1, 3, 2, 4 };
		Integer[] pri2 = { 2, 4, 3 };
		Integer[] pri4 = { 4 };
		Integer[] pri8 = { 8 };
		map.put(1, pri1);
		map.put(2, pri2);
		map.put(4, pri4);
		map.put(8, pri8);

		switch (applyNum) {
		case 1:
			Integer[] pri = map.get(1);
			for (int i = 0; i < pri.length; i++) {
				if (link1.size() == link2.size()) {
					// 两个一样多,那么就任意取一个
					List<List<Integer>> result = new ArrayList<>();
					for (Integer item : link1) {
						List<Integer> itemList = new ArrayList<>();
						itemList.add(item);
						result.add(itemList);
					}
					for (Integer item : link2) {
						List<Integer> itemList = new ArrayList<>();
						itemList.add(item);
						result.add(itemList);
					}
					System.out.println(result);
					break;
				}
				if (link1.size() == pri[i]) {
					// 输出link1内的内容
					List<List<Integer>> result = new ArrayList<>();
					for (Integer item : link1) {
						List<Integer> itemList = new ArrayList<>();
						itemList.add(item);
						result.add(itemList);
					}
					System.out.println(result);
					break;
				}
				if (link2.size() == pri[i]) {
					// 输出link1内的内容
					List<List<Integer>> result = new ArrayList<>();
					for (Integer item : link2) {
						List<Integer> itemList = new ArrayList<>();
						itemList.add(item);
						result.add(itemList);
					}
					System.out.println(result);
					break;
				}
			}
			break;
		case 2:
			Integer[] priTwo = map.get(2);
			for (int i = 0; i < priTwo.length; i++) {
				if (link1.size() == link2.size()) {
					// 随机取出2个
					ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
					result.addAll(getRandom(link1, applyNum));
					result.addAll(getRandom(link2, applyNum));
					System.out.println(result);
					break;
				}
				if(link1.size()==priTwo[i]){
					ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
					result.addAll(getRandom(link1, applyNum));
					System.out.println(result);
					break;
				}
				if(link2.size()==priTwo[i]){
					ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
					result.addAll(getRandom(link2, applyNum));
					System.out.println(result);
					break;
				}
			}
			break;
		case 4:
			if(link1.size()==link2.size()&&link1.size()==4){
				ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
				List<Integer> itemList = new ArrayList<>();
				itemList.addAll(link1);
				result.add(itemList);
				itemList = new ArrayList<>();
				itemList.addAll(link2);
				result.add(itemList);
				System.out.println(result);
				break;
			}
			if (link1.size() == 4) {
				ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
				List<Integer> itemList = new ArrayList<>();
				itemList.addAll(link1);
				result.add(itemList);
				System.out.println(result);
				break;
			}
			if (link2.size() == 4) {
				ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
				List<Integer> itemList = new ArrayList<>();
				itemList.addAll(link2);
				result.add(itemList);
				System.out.println(result);
			}
			break;
		case 8:
			if (link1.size() == 4 && link2.size() == 4) {
				ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();
				List<Integer> itemList = new ArrayList<>();
				itemList.addAll(link1);
				itemList.addAll(link2);
				result.add(itemList);
				System.out.println(result);
			}
			break;
		default:
			break;
		}
	}

	// 随机产生随机下标
	static List<List<Integer>> getRandom(List<Integer> link, int num) {
		List<List<Integer>> resultList = new ArrayList<>();
		if (link.size() == num) {
			resultList.add(link);
		} else if (link.size() > num) {
			// 长度是4 取2个 长度4取3个
			// 长度3取2个
			if (link.size() == 4 && num == 2) {
				List<Integer> items = new ArrayList<>();
				items.add(link.get(0));
				items.add(link.get(1));
				resultList.add(items);

				items = new ArrayList<>();
				items.add(link.get(0));
				items.add(link.get(2));
				resultList.add(items);

				items = new ArrayList<>();
				items.add(link.get(0));
				items.add(link.get(3));
				resultList.add(items);

				items = new ArrayList<>();
				items.add(link.get(1));
				items.add(link.get(2));
				resultList.add(items);

				items = new ArrayList<>();
				items.add(link.get(1));
				items.add(link.get(3));
				resultList.add(items);

				items = new ArrayList<>();
				items.add(link.get(2));
				items.add(link.get(3));
				resultList.add(items);
			} else if (link.size() == 3 && num == 2) {
				List<Integer> items = new ArrayList<>();
				items.add(link.get(0));
				items.add(link.get(1));
				resultList.add(items);

				items = new ArrayList<>();
				items.add(link.get(0));
				items.add(link.get(2));
				resultList.add(items);
				
				items = new ArrayList<>();
				items.add(link.get(1));
				items.add(link.get(2));
				resultList.add(items);
			}

		}
		return resultList;
	}
}

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

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

相关文章

IEEE独立出版 | 第七届计算机科学与智能控制国际会议(ISCSIC 2023)

会议简介 Brief Introduction 第七届计算机科学与智能控制国际会议(ISCSIC 2023) 会议时间&#xff1a;2023年10月27日-29日 召开地点&#xff1a;中国南京 大会官网&#xff1a; ISCSIC 2023-2023 7th International Symposium on Computer Science and Intelligent Control(I…

大型企业建设财务共享中心需要重视的5个核心要素

随着数字化技术和财务共享的发展&#xff0c;财务共享建设正逐步深化。为发挥企业财务共享中心的最大价值&#xff0c;用友网络财务共享专家唐勇提出了5个关键点&#xff0c;需要企业重视&#xff1a; 从整体财务职能转型的视角规划财务共享中心的定位&#xff1a; 企业在规划…

为年迈母亲打造的“亲情关怀”视频聊天软件

写在前面 母亲的眼神越来越不好了&#xff0c;长期干农活的手也愈加粗糙&#xff0c;智能手机本是一个平常之物&#xff0c;她确无缘使用&#xff0c;现在仍在不断更换着“翻盖手机”。为了能让她绕开微信视频聊天那些繁琐而容易点错的功能&#xff0c;程序员的我“开发”下面…

如何通过QQ进行手机号溯源

0x01 通过在线网址查询 Q绑在线查询&#xff1a;http://2k.24kz.cn/ 0x02 非数据库查询方法 如果上述的网址查询不到信息的号。会提示说没有找到 可能说明数据库中并无该qq号所绑定手机号的信息 开始正题&#xff1a; 第一步&#xff1a;点击添加账号&#xff0c;复制其QQ账…

Prompt Engineering | 文本转换prompt

LLM非常擅长将输入转换成不同的格式&#xff0c;例如多语种文本翻译、拼写及语法纠正、语气调整、格式转换等。 文章目录 1、文本翻译1.1、中文转西班牙语1.2、识别语种1.3、多语种翻译1.4、翻译正式语气1.4、通用翻译器 2、语气 / 风格调整3、格式转换4、拼写及语法纠正5、一个…

2021上半年

2021上半年 a 程序计数器pc d 更正一下&#xff1a;都是支持流水线技术的 DMA传送数据不需要CPU干预&#xff0c;和io设备并行工作&#xff08;存储周期&#xff09; c c c b c 关于TLS: B B D A D 保护的是&#xff1a;软件程序和文档 D B C B 前向传播&#xff1…

Containerd+Kubernetes搭建k8s集群

ContainerdKubernetes搭建k8s集群 文档说明安装软件的版本和下载地址环境说明服务器准备负载均衡IP地址准备 安装步骤环境设置关闭防火墙关闭SELinux关闭swap分区设置主机名称解析设置主机名称加载 br_netfilter 模块桥接的IPv4流量传递到iptables升级操作系统内核导入elrepo g…

Three.js--》实现3d汽车模型展览搭建

目录 项目搭建 初始化three.js基础代码 添加汽车模型展示 动态修改汽车模型 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还是借助…

makefile make 的隐式规则

文章目录 前言一、什么是隐式规则?二、典型隐式规则情况三、查看隐式规则四、隐式规则的禁用五、隐式规则的副作用总结 前言 一、什么是隐式规则? make 提供了一些常用的&#xff0c;例行的规则实现。 当相应的规则未提供时 &#xff0c; make 尝试使用隐式规则。 make 提供…

KDZK-F水轮发电机转子测试仪

一、产品概述 KDZK-F水轮发电机转子测试仪是判断发电机转子绕组有无匝间短路的专用仪器&#xff0c;可以自动、手动&#xff08;单向或双向&#xff09;测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标&#xff0c;操作更方便。 可选择快速的…

手写操作系统必掌握基础:函数调用约定

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。深入研究Windows内核、Linux内核、Hotspot源码…聚焦做那些大家想学没地方学的课程&#xff1a;手写操作系统、手写虚拟机、手写模拟器、手写编程语言… 目前我已经做了两个成熟的课程&#xff1a;手写JVM、手写OS&a…

RTX4060 系 2399 元起,NVIDIA 又赢麻了

就在上周&#xff0c;NVIDIA 正式官宣了 RTX40 系显卡家族中更加主流的三款新品。 分别是 RTX 4060、RTX 4060 Ti 8G 以及 RTX 4060 Ti 16G。 其中 RTX 4060 Ti 8G 解禁时间为本月 23 日晚&#xff0c;24 日上架开售。 而 RTX 4060、RTX 4060 Ti 16G 要等到七月份。 价格部分…

2023年湖北建筑架子工报名流程?报名需要什么资料?考试一次过?

2023年湖北建筑架子工报名流程&#xff1f;报名需要什么资料&#xff1f;考试一次过&#xff1f; 建筑架子工证是建筑行业必备的证书之一&#xff0c;它是证明持有人可以在建筑工地上从事搭建脚手架、模板等施工工作的重要证明。启程别告诉你架子工的报名流程和资料。 百度搜一…

测试提效1-电商一键创单的实现

因电商项目不同场景下单特别多&#xff0c;而走前端流程特别慢。所以在某些测试场景需要特定配送方式 和 特定配送状态数据&#xff0c;本次实现快速创建。 1、前端页面 前端页面采用vue &#xff0c;页面需要的属性或字段&#xff0c;打算包括 环境env、店铺(准备了3种不同模…

一种新的爬虫网络解锁器

事出原由 遇到一个需要采集境外电商的需求&#xff0c;相比国内各种层出不穷的反爬手段&#xff0c;境外产品更注重于用户行为和指纹上。 所以笔者在想是否有类似于指纹浏览器的环境可以提供给爬虫采集器使用。 经过检索&#xff0c;找到了一种名为爬虫网络解锁器的新兴产品…

SAP: 建立HTTPS 连接时,报错 ICM_HTTP_SSL_PEER_CERT_UNTRUSTED

报错1&#xff1a; SSL handshake with tpm-uat.jlbry.cn:443 failed: SSSLERR_PEER_CERT_UNTRUSTED (-102)#The peers X.509 Certificate (chain) is untrusted##SapSSLSessionStartNB()SSSLERR_PEER_CERT_UNTRUSTED# SSL:SSL_read() failed (536872221/0x2000051d)# >…

【正点原子STM32连载】第十四章 蜂鸣器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十四…

【无标题】ELISA-3(加装跟踪装置)—让群体协作更智能!

群体智能是近年来发展迅速的一个人工智能学科领域&#xff0c;通过对蚂蚁、蜜蜂等为代表的社会性昆虫群体行为的研究&#xff0c;实现分布式等智能行为。作为新一代人工智能的重要方向&#xff0c;群体智能通常用于无人机、机器人集群的协同作业。目前&#xff0c;群体智能在基…

零操作难度,轻松进行应用测试,App专项测试之Monkey测试完全指南!

目录 前言&#xff1a; 一、 Monkey测试的基础参数 1.1 事件类型参数&#xff1a; 1.2 覆盖包 1.3 事件数量 二、 Monkey测试的高级参数 2.1 稳定性级别 2.2 策略参数 2.3 包含选项参数 三、 附加代码 四、 总结 前言&#xff1a; 在移动应用的开发过程中&#xff0…

数据结构(C语言):有序顺序表的设计及相关操作函数

一、题目 有序顺序表的设计 实验要求&#xff1a; 有序顺序表的操作&#xff0c;包括初始化&#xff0c;求数据元素个数&#xff0c;插入&#xff0c;删除和取数据元素。放在头文件中&#xff08;建议尝试用动态数组实现有序顺序表&#xff09;&#xff1b;注意有序顺序表的…