当前位置: 首页 > news >正文

华为OD技术C卷“测试用例执行计划”Java解答

描述

示例

算法思路1

整体思路是,先读取特性的优先级和测试用例覆盖的特性列表,然后计算每个测试用例的优先级,并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序,输出测试用例的索引,即为执行顺序。 

  1. 首先从标准输入中读取了两个整数 nm,分别表示特性的数量和测试用例的数量。

  2. 创建了一个长度为 n 的数组 priorities,用于存储特性的优先级。

  3. 使用循环读取每个特性的优先级,并将其存储到 priorities 数组中。

  4. 通过 in.nextLine() 读取了一个空行,用于消耗掉换行符。

  5. 创建了一个二维数组 res,其行数为测试用例的数量 m,列数为2,用于存储测试用例的优先级和对应的索引。

  6. 使用循环遍历每个测试用例:

    • 使用 in.nextLine() 读取了一行输入,其中包含了一个测试用例覆盖的特性列表。
    • 使用 split(" ") 方法将输入拆分为特性的索引数组。
    • 使用流式处理将特性的索引转换为整数流,并对每个特性索引计算其对应特性的优先级,并将所有特性的优先级求和。
    • 将求和得到的优先级和当前测试用例的索引存储到 res 数组中。
  7. 使用 Arrays.sort()res 数组进行排序,排序规则为:

    • 首先按照测试用例的优先级从大到小排序。
    • 如果测试用例的优先级相同,则按照测试用例的索引从小到大排序。
  8. 使用循环遍历排序后的 res 数组,并输出测试用例的索引(ID),注意索引从0开始,需要加1。

答案1

import java.util.Arrays;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别int n = in.nextInt();int m = in.nextInt();int[] priorities = new int[n];for (int i = 0; i < n; i++) {priorities[i] = in.nextInt();}in.nextLine();int[][] res = new int[m][2];for (int i = 0; i < m; i++) {int sum = Arrays.stream(in.nextLine().split(" ")).mapToInt(a -> {int idx = Integer.parseInt(a);return priorities[idx - 1];}).sum();res[i][0] = sum;res[i][1] = i;}Arrays.sort(res, (a,b) -> {return b[0]-a[0] == 0 ? a[1] - b[1] : b[0]-a[0];});for (int[] re : res) {System.out.println(re[1]+1);}}
}

详解1

int sum = Arrays.stream(in.nextLine().split(" ")).mapToInt(a -> { int idx = Integer.parseInt(a); return priorities[idx - 1]; }).sum(); 

  1. in.nextLine() 用来读取一行输入。这行输入是一系列用空格分隔的整数,表示任务的优先级索引。

  2. .split(" ") 将读取到的一行输入按照空格进行分割,将每个优先级索引分开,形成一个字符串数组。

  3. Arrays.stream() 将得到的字符串数组转换为一个流(Stream),这样我们就可以对每个优先级索引进行操作。

  4. .mapToInt(a -> {...}) 这是一个映射操作,对流中的每个元素进行处理。对于每个优先级索引 a,执行一系列操作:

    a. int idx = Integer.parseInt(a); 将字符串表示的优先级索引转换为整数。

    b. priorities[idx - 1] 通过索引找到对应的优先级,并返回。

  5. .sum() 对映射后的优先级数组求和,得到该任务的总优先级。

整体来说,这段代码的作用是将每个任务的优先级索引转换为对应的优先级,然后计算总优先级,最后将这些总优先级存储在 sum 变量中。 

Arrays.sort(res, (a,b) -> {
    return b[0]-a[0] == 0 ? a[1] - b[1] : b[0]-a[0];
}); 

这段代码使用了一个 lambda 表达式作为比较器,用于比较二维数组 res 中的元素。Lambda 表达式的参数是 (a, b),其中 abres 中的每个元素,类型为 int[]。Lambda 表达式的主体根据总优先级和任务索引的比较结果返回一个整数值,用于指示元素的相对顺序。

Lambda 表达式中的逻辑解释如下:

  • b[0]-a[0] == 0:首先,按照元素的第一个值(即总优先级)进行比较。如果两个元素的总优先级相等,则进入三元条件运算符的条件部分。

  • a[1] - b[1]:如果两个元素的总优先级相等,则按照元素的第二个值(即任务索引)进行比较。这部分逻辑会在总优先级相等时生效,以确保相同优先级的任务按照索引升序排列。

  • b[0]-a[0]:如果两个元素的总优先级不相等,则直接根据总优先级的差值返回比较结果,以便在排序时按照总优先级降序排列。

Lambda表达式应用 

Lambda表达式是Java编程语言中引入的一种函数式编程特性。它提供了一种简洁的语法来创建匿名函数,从而更轻松地实现函数式编程风格的代码。Lambda表达式通常用于替代匿名内部类的简单情况,使代码更加简洁和易读。

Lambda表达式的一般语法如下:

(parameters) -> expression

或者

(parameters) -> { statements; }

Lambda表达式由几个部分组成:

  1. 参数列表:表示Lambda表达式接受的参数。如果没有参数,可以留空或使用一对空括号 ()
  2. 箭头 ->:将参数列表和Lambda表达式的主体分隔开来。
  3. 主体:可以是一个表达式,也可以是一段代码块。如果是一个表达式,它的结果将作为Lambda表达式的返回值。如果是一段代码块,则需要使用大括号 {} 将代码块括起来,并且需要使用 return 关键字来返回值。

Lambda表达式的特点包括:

  • 简洁性:Lambda表达式使用了一种简洁的语法,可以使代码更加简洁、易读。
  • 匿名性:Lambda表达式可以创建匿名函数,无需显式地命名函数。
  • 类型推断:Java编译器可以推断Lambda表达式的参数类型,使得Lambda表达式的使用更加方便。
  • 语法灵活性:Lambda表达式可以用于函数式接口,使得在需要函数式接口的地方可以使用Lambda表达式代替传统的匿名内部类。

Lambda表达式详见Lambda表达式-CSDN博客

Stream流待更新……

算法思路2

  1. 读取输入并保存数据结构:

    • 读取特性的数量 N 和测试用例的数量 M。
    • 创建一个长度为 N 的数组,用于存储特性的优先级。
    • 创建一个长度为 M 的列表,其中每个元素是一个集合,表示每个测试用例覆盖的特性。
  2. 计算测试用例的优先级:

    • 遍历测试用例列表,对于每个测试用例,遍历其覆盖的特性集合,累加特性的优先级,得到测试用例的优先级。
  3. 按照规则排序测试用例:

    • 对测试用例列表进行排序,首先按照优先级从大到小排序,如果优先级相同,则按照测试用例的ID从小到大排序。
  4. 输出测试用例的执行顺序:

    • 按照排序后的顺序输出测试用例的ID。

答案2

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt(); // 特性的数量int M = scanner.nextInt(); // 测试用例的数量int[] priorities = new int[N + 1]; // 特性的优先级,索引从1开始for (int i = 1; i <= N; i++) {priorities[i] = scanner.nextInt();}scanner.nextLine(); // 消耗换行符List<TestCase> testCases = new ArrayList<>();for (int i = 1; i <= M; i++) {int priority = 0;String[] features = scanner.nextLine().split(" ");for (String feature : features) {int featureId = Integer.parseInt(feature);priority += priorities[featureId];}testCases.add(new TestCase(i, priority));}// 按照优先级从大到小排序,如果优先级相同则按照ID从小到大排序testCases.sort((a, b) -> a.priority != b.priority ? Integer.compare(b.priority, a.priority) : Integer.compare(a.id, b.id));// 输出测试用例的执行顺序for (TestCase testCase : testCases) {System.out.println(testCase.id);}scanner.close();}static class TestCase {int id; // 测试用例的IDint priority; // 测试用例的优先级public TestCase(int id, int priority) {this.id = id;this.priority = priority;}}
}

详解2

list列表接口的使用详见Java“集合框架”知识速成笔记学完就去实战(三)-CSDN博客文章浏览阅读1.1k次,点赞32次,收藏12次。吐血整理!本文为Java中集合类型的一些常见接口和实现类,包括List接口,Set接口和Map接口,重点介绍了HashSet实现类。https://blog.csdn.net/wwwwwmmn/article/details/136433958 

相关文章:

华为OD技术C卷“测试用例执行计划”Java解答

描述 示例 算法思路1 整体思路是&#xff0c;先读取特性的优先级和测试用例覆盖的特性列表&#xff0c;然后计算每个测试用例的优先级&#xff0c;并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序&#xff0c;输出测试用例的索引&#xff0c;即为执行顺序。…...

solana 入门 1

solana-co-learn Solana 开发学习笔记(一)——从 Hello World 出发 安装开发环境 windows下环境配置 wsl First start with installing WSL on your system. wsl --install wsl安装Ubuntu 列出可用的分发版 wsl.exe --list --online显示&#xff1a; 以下是可安装的有效…...

JavaEE之多线程(创建线程的五种写法)详解

&#x1f63d;博主CSDN主页: 小源_&#x1f63d; &#x1f58b;️个人专栏: JavaEE &#x1f600;努力追逐大佬们的步伐~ 目录 1. 前言 2. 操作系统"内核" 3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!) 3.1 继承 Thread, 重写 run 3. 2 实现 Runnabl…...

ChatGPT国内能用吗?中国用户怎么才能使用ChatGPT?

与ChatGPT类似的国内网站&#xff0c;他们都能提供和ChatGPT相似的能力&#xff0c;而且可以在国内直接使用。 点击直达方式 百科GPT官网&#xff1a;baikegpt.cn ChatGPT是基于GPT-3.5架构的语言模型的一个实例&#xff0c;由OpenAI开发。以下是ChatGPT的发展历史&#xff1…...

集群保持集群负载均衡和hash一致性

集群保持负载均衡和一致性哈希是在构建分布式系统时经常涉及的两个重要概念。 负载均衡&#xff1a; - 在集群中&#xff0c;负载均衡是指将传入的请求有效地分发到不同的服务器上&#xff0c;以确保每台服务器都能够处理适量的流量&#xff0c;避免某些服务器过载而造成性能问…...

吴恩达深度学习笔记:神经网络的编程基础2.9-2.14

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.9 逻辑回归中的梯度下降&#xff08;Logistic Regression Gradient Descent&#xff09; 第一门课&#xff…...

在C++项目中使用python脚本(四种)常见报错解决

上一期我们讲了如何在C中使用python脚本&#xff0c;这期讲讲过程中常会遇到的一些错误。 一、c代码未设置python路径 Py_SetPythonHome(L"D:\\anaconda3\\envs\\envpython3.7");这一句很重要&#xff0c;切记加上并且换成自己的路径 Py_SetPythonHome(L"D:\\a…...

微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】

qiankun官方文档&#xff1a;qiankun - qiankun 一、创建主应用&#xff1a; 这里以 vue 为主应用&#xff0c;vue版本&#xff1a;2.x // 全局安装vue脚手架 npm install -g vue/clivue create main-app 省略 vue 创建项目过程&#xff0c;若不会可以自行百度查阅教程 …...

nodejs切换淘宝源

1. 查看当前地址 npm config get registrynpm config get disturl2. 设置当前地址&#xff08;设置为淘宝镜像&#xff09; npm config set registry http://registry.npm.taobao.org/3. 设置当前地址&#xff08;设置为默认地址&#xff09; npm config set registry https…...

怎么避免电脑数据被拷贝?电脑如何禁用USB功能?

在无纸化办公的今天&#xff0c;很多重要数据都存放在电脑中。为了避免数据泄露&#xff0c;需要采用安全的方式保护电脑数据。那么&#xff0c;该如何避免电脑数据被拷贝呢&#xff1f;下面我们就来了解一下。 方法一&#xff1a;物理隔绝 物理隔绝是一种原始但有效的USB禁用…...

给电脑加硬件的办法 先找电脑支持的接口,再买相同接口的

需求&#xff1a;我硬盘太小&#xff0c;换或加一个大硬盘 结论&#xff1a;接口是NVMe PCIe 3.0 x4 1.找到硬盘型号 主硬盘 三星 MZALQ512HALU-000L2 (512 GB / 固态硬盘) 2.上官网查 或用bing查 非官方渠道信息&#xff0c;不确定。...

uniapp微信小程序_自定义交费逻辑编写

一、首先看最终效果 先说下整体逻辑,选中状态为淡紫色,点击哪个金额,充值页面上就显示多少金额 二、代码 <view class"addMoney"><view class"addMoneyTittle">充值金额</view><view class"selfaddmoney" :class"{…...

论文阅读——RingMo

RingMo: A Remote Sensing Foundation Model With Masked Image Modeling 与自然场景相比&#xff0c;RS图像存在以下困难。 1&#xff09;分辨率和方位范围大&#xff1a;受遥感传感器的影响&#xff0c;图像具有多种空间分辨率。此外&#xff0c;与自然图像的实例通常由于重…...

Hadoop,Hive 数据预处理CR

记录一次大材小用,我在将.csv电影数据集 电影json数据 导入MySQL时,出现了报错: 很明显,意味着.csv中的数据有非utf8编码的, 尝试使用file查看了下.csv文件的编码格式: 如果不确定原始编码,可以先用file命令尝试检测一下: file -i input.csv该命令会显示文件的MIME类型…...

小程序开发——获取设备信息 API(三)

ty.device.getShareDeviceInfo 获取共享设备信息 需引入DeviceKit&#xff0c;且在>2.2.0版本才可使用 请求参数 Object object 属性类型默认值必填说明deviceIdstring是deviceId 设备 idcompletefunction否接口调用结束的回调函数&#xff08;调用成功、失败都会执行&am…...

Vue2 + node.js项目

1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …...

如何使用IDE端通义灵码

如何使用IDE端通义灵码 第一步&#xff1a;安装IDE插件&#xff08; VS Code 和 JetBrains 二选一&#xff09; 如何下载安装VS Code &#xff1a;https://code.visualstudio.com 如何下载安装JetBrains&#xff1a;https://www.jetbrains.com/idea/download 第二步&#x…...

微服务分布式springcloud的体育场地预约系统演kdm1z

体育场馆设施预约系统是在实际应用和软件工程的开发原理之上&#xff0c;运用java语言以及Springcloud框架进行开发。首先要进行需求分析&#xff0c;分析出体育场馆设施预约系统的主要功能&#xff0c;然后设计了系统结构。整体设计包括系统的功能、系统总体结构、系统数据结构…...

IDEA开启Run Dashboard

1、Run Dashboard是什么&#xff0c;为什么要使用 Run Dashboard 是 IntelliJ IDEA 中的一个工具窗口&#xff0c;用于管理和监视项目中正在运行的应用程序和配置。它提供了一种集中管理运行和调试过程的方式&#xff0c;可以让开发人员更方便地查看和控制正在运行的应用程序。…...

小程序学习3 goods-card

pages/home/home home.wxml <goods-listwr-class"goods-list-container"goodsList"{{goodsList}}"bind:click"goodListClickHandle"bind:addcart"goodListAddCartHandle"/> <goods-list>是一个自定义组件&#xff0c;它具…...

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024)

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 图像处理 基于图像的渲染 计算机视觉 可视化分析 模式识别 3D打印 渲染和动画 渲染技术 电脑动画 基于草图的建模 机械…...

Linux系列

安装系列 1.MySQL安装 我们要通过rpm&#xff0c;进行MySQL数据库的安装&#xff0c;主要的步骤如下&#xff1a; rpm -qa 查询当前系统中安装的所有软件 rpm -qa | grep mysql 查询当前系统中安装的名称带mysql的软件 rpm -…...

SQL笔记 -- 黑马程序员

SQL目录 文章目录 SQL目录一、SQL分类1、DDL2、数据类型3、DML4、DQL1&#xff09;基本查询2&#xff09;条件查询3&#xff09;聚合函数查询4&#xff09;分组查询5&#xff09;排序查询6&#xff09;分页查询 5、DCL 一、SQL分类 分类说明DDL数据定义语言&#xff0c;用来定…...

C# MES通信从入门到精通(1)——串口传输文件

前言: 在上位机软件开发领域,有一些工厂的mes系统需要我们通过串口发送文件的方式把一些图片或者检测数据csv文件等发送给服务器,这种方式是一些比较旧的工厂采用的方式,但是这种方式也是存在的,本文就是讲解如何使用串口发送文件详情见下文。 1、串口发送文件思路 将需…...

论文阅读-federated unlearning via class-discriminative pruning

论文阅读-federated unlearning via class-discriminative pruning FUCP 通过类别区分性剪枝进行联邦遗忘 综述中描述&#xff1a;属于面向全局模型中的局部参数调整 利用卷积层的结构特定进行联邦忘却学习&#xff0c;wang等人提出了针对图像分类任务的联邦忘却学习算法FUCP&…...

研发效能DevOps: OpenEuler 部署 drone 持续集成平台

目录 一、实验 1.环境 2.OpenEuler 部署 drone 持续集成平台 二、问题 1.drone登录失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168.204.145&#xff08;动态&#xff09; 192.168.204.141&…...

C#,图论与图算法,图着色问题(Graph Coloring)的威尔士-鲍威尔(Welch Powell Algorithm)算法与源代码

Welsh, D.J.A. and Powell, M.B. (1967) An Upper Bound for the Chromatic Number of a Graph and Its Application to Timetabling Problems. 《The Computer Journal》, 10, 85-86. 《The Computer Journal》 1 图着色算法概述 1967年&#xff0c;Welsh和Powell算法引入了…...

用python写一个脚本,实现加速3X并压缩mp4视频以降低文件大小。

为了实现您的需求&#xff0c;我们将使用Python的moviepy库来加速MP4视频3倍并使用ffmpeg选项来进行压缩&#xff0c;以降低文件大小。如果您还没有安装这些库&#xff0c;请先通过以下命令进行安装&#xff1a; pip install moviepy这是一个步骤概述&#xff1a; 读取视频文…...

Flink广播流 BroadcastStream

文章目录 前言BroadcastStream代码示例Broadcast 使用注意事项 前言 Flink中的广播流&#xff08;BroadcastStream&#xff09;是一种特殊的流处理方式&#xff0c;它允许将一个流&#xff08;通常是一个较小的流&#xff09;广播到所有的并行任务中&#xff0c;从而实现在不同…...

IP数据报格式

每一行都由32位比特&#xff0c;即4个字节组成&#xff0c;每个格子称为字段或者域。IP数据报由20字节的固定部分和最大40字节的可变部分组成。 总长度 总长度为16个比特&#xff0c;该字段的取值以字节为单位&#xff0c;用来表示IPv4数据报的长度(首部长度数据载荷长度)最大…...