一、题目描述
存储阵列上使用的一批固态硬盘,根据硬盘磨损值给定一个数组endurances,数组中每个元素表示单块硬盘的磨损度(0到10000之间)。
磨损度越大,表示此盘需要更换的概率越高。需要找出磨损度最高三块盘下标和磨损度最低的三块盘下标。
二、输入描述
一组硬盘磨损度的数组。
说明:
(1) 数组endurances中无重复值
(2) 数组的长度范围:[6,200]
(3) 数组的下标从0开始。
三、输出描述
第一行:磨损度最高三块盘下标,按下标升序展示
第二行:磨损度最低的三块盘下标,按下标升序展示
1、输入
1 50 40 68 72 86 35 14 87 99 63 75
2、输出
5 8 9
0 6 7
四、解题思路
- 创建一个大小为 3 的最小堆(min heap)和一个大小为 3 的最大堆(max heap),用于存储磨损度最高的三块盘和最低的三块盘。
- 遍历硬盘磨损度的数组,将每个磨损度元素添加到堆中。
- 如果堆的大小超过 3,则将堆顶元素弹出,保持堆的大小为 3。
- 最后,将堆中的元素按顺序弹出,得到磨损度最高三块盘和最低三块盘的下标。
- 输出结果。
五、Java算法源码
pu