当前位置:   article > 正文

[华为OD]实现一个支持优先级的队列,高优先级先出队列 100

[华为OD]实现一个支持优先级的队列,高优先级先出队列 100

题目:

实现一个支持优先级的队列,高优先级先出队列;同优先级时先进先出。

如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。

队列存储的数据内容是一个整数。

输入描述:

一组待存入队列的数据(包含内容和优先级)

输出描述:

队列的数据内容(优先级信息输出时不再体现)

补充说明:

不用考虑输入数据不合法的情况,测试数据不超过 100 个

示例 1

输入:

(10,1),(20,1),(30,2),(40,3)

输出:

40,30,10,20

说明:

输入样例中,向队列写入了 4 个数据,每个数据由数据内容和优先级组成。

输入和输出内容都不含空格。

数据 40 的优先级最高,所以最先输出,其次是 30;10 和 20 优先级相同,所以按输入

顺序输出。

示例 2

输入:

(10,1),(10,1),(30,2),(40,3)

输出:

40,30,10说明:

输入样例中,向队列写入了 4 个数据,每个数据由数据内容和优先级组成。

输入和输出内容都不含空格。

数据 40 的优先级最高,所以最先输出,其次是 30;两个 10 和 10 构成重复数据,被丢

弃一个

题解:

需要构造对象,对象里面三个元素,输入数据,优先级,和输入位置。

然后重写equals方法,采用set集合去重和compareTo 排序方法,再排序输入在list中,输出需要的值就可以了

  1. import java.util.Objects;
  2. public class Data implements Comparable<Data> {
  3. private int index;
  4. private int value;
  5. private int height;
  6. public Data(int value, int height, int index) {
  7. this.index = index;
  8. this.value = value;
  9. this.height = height;
  10. }
  11. public int getIndex() {
  12. return index;
  13. }
  14. public void setIndex(int index) {
  15. this.index = index;
  16. }
  17. public int getValue() {
  18. return value;
  19. }
  20. public void setValue(int value) {
  21. this.value = value;
  22. }
  23. public int getHeight() {
  24. return height;
  25. }
  26. public void setHeight(int height) {
  27. this.height = height;
  28. }
  29. @Override
  30. public boolean equals(Object o) {
  31. if (this == o) return true;
  32. if (o == null || getClass() != o.getClass()) return false;
  33. Data data = (Data) o;
  34. return value == data.value &&
  35. height == data.height;
  36. }
  37. @Override
  38. public int hashCode() {
  39. return Objects.hash(value, height);
  40. }
  41. @Override
  42. public int compareTo(Data o) {
  43. if (this.height != o.height) return o.height - this.height;
  44. return this.index - o.index;
  45. }
  46. }
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3. public class PriQueue {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. String str = sc.nextLine();
  7. String[] stArr = str.substring(1, str.length() - 1).split("\\),\\(");
  8. Set<Data> dataSet = new HashSet<>();
  9. for (int i = 0; i < stArr.length; i++) {
  10. String[] art = stArr[i].split(",");
  11. Data data = new Data(Integer.valueOf(art[0]), Integer.valueOf(art[1]), i);
  12. if(!dataSet.contains(data)){
  13. dataSet.add(data);
  14. }
  15. }
  16. List<Data> dataList = dataSet.stream().sorted().collect(Collectors.toList());
  17. StringBuilder sb = new StringBuilder();
  18. for (int i = 0; i < dataList.size(); i++) {
  19. if (i != 0) sb.append(",");
  20. sb.append(dataList.get(i).getValue());
  21. }
  22. System.out.println(sb.toString());
  23. }
  24. }

验证结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/520672
推荐阅读
相关标签
  

闽ICP备14008679号