找磨损度最高和最低的硬盘 - 华为机试真题题解

分值: 100分

题解: Java / Python / C++

alt

题目描述

存储阵列上使用的一批固态硬盘,根据硬盘磨损值给定一个数组endurances,数组中每个元素表示单块硬盘的磨损度(0到10000之间)。

磨损度越大,表示此盘需要更换的概率越高。需要找出磨损度最高三块盘下标和磨损度最低的三块盘下标。

输入描述

一组硬盘磨损度的数组。

说明:

(1) 数组endurances中无重复值

(2) 数组的长度范围:[6,200]

(3) 数组的下标从0开始。

输出描述

第一行:磨损度最高三块盘下标,按下标升序展示

第二行:磨损度最低的三块盘下标,按下标升序展示

示例1

输入:
1 50 40 68 72 86 35 14 87 99 63 75

输出:
5 8 9
0 6 7

解释:
输入:1 50 40 68 72 86 35 14 87 99 63 75:表示一组硬盘磨损度的数组,其中的每个数值表示每个硬盘对应的磨损度。
输出:
5 8 9:表示磨损度最高三块盘的下标
0 6 7:表示磨损度最低的三块盘的下标

示例2

输入:
23 34 56 12 11 10

输出:
0 1 2
3 4 5

解释:
输入:23 34 56 12 11 10:表示一组硬盘磨损度的数组,其中的每个数值表示每个硬盘对应的磨损度。
输出:
0 1 2:表示磨损度最高三块盘的下标
3 4 5:表示磨损度最低的三块盘的下标

题解

简单构造题

将“磨损度” 和 “下标” 封装在一起然后根据“磨损度”排序,前三个是磨损度最低的三块盘, 后三个是磨损度最高的三块盘。

Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * @author code5bug
 */
public class Main {

    // 打印输出
    static void print(List<Integer> list) {
        int n = list.size();
        for (int i = 0; i < n; i++) {
            if (i + 1 == n) {
                System.out.println(list.get(i));
            } else {
                System.out.print(list.get(i) + " ");
            }
        }
    }

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

        List<int[]> endurances =

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

2024华为OD机试真题题解 文章被收录于专栏

华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。

全部评论
Python 就是简洁
点赞
送花
回复 分享
发布于 2023-12-26 12:01 湖北
java Arrays.sort.....
点赞
送花
回复 分享
发布于 02-23 12:05 广东
国泰君安
校招火热招聘中
官网直投
排序的时间复杂度是nlogn,可以用两个list分别保存最大三个值和最小三个值的下标,并用两个变量分别存储最大磨损中的三个值中的最小值下标和最小磨损的三个值中的最大值的下标,对列表进行一次遍历,每次只需要比较3~6次,时间复杂度为6n
点赞
送花
回复 分享
发布于 04-25 09:43 浙江

相关推荐

10 3 评论
分享
牛客网
牛客企业服务