Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Comparator;
  4. import java.util.List;
  5.  
  6. class Pair {
  7. private final Integer a;
  8. private final Integer b;
  9.  
  10. Pair(Integer a, Integer b) {
  11. this.a = a;
  12. this.b = b;
  13. }
  14.  
  15. public Integer getA() {
  16. return a;
  17. }
  18.  
  19. public Integer getB() {
  20. return b;
  21. }
  22.  
  23. @Override
  24. public String toString() {
  25. return "Pair{" +
  26. "a=" + a +
  27. ", b=" + b +
  28. '}';
  29. }
  30. }
  31.  
  32. public class Application {
  33.  
  34. private static Pair findMinimumRange(List<List<Integer>> lists) {
  35. int m = lists.size();
  36. List<Pair> merged = new ArrayList<>();
  37. for (int i = 0; i < lists.size(); i++) {
  38. List<Integer> list = lists.get(i);
  39. for (Integer integer : list) {
  40. merged.add(new Pair(integer, i));
  41. }
  42. }
  43. merged.sort(Comparator.comparingInt(Pair::getA));
  44.  
  45. ArrayList<Integer> counter = new ArrayList<>();
  46. for (int i = 0; i < lists.size(); ++i) {
  47. counter.add(0);
  48. }
  49. int current_classes = 0;
  50. int l = 0;
  51. int r = 0;
  52.  
  53. int min_value = merged.get(merged.size()-1).getA() - merged.get(0).getA();
  54. int min_l = 0;
  55. int min_r = merged.size() - 1;
  56.  
  57. while (true) {
  58. if (current_classes < m) {
  59. if (r == merged.size()) {
  60. break;
  61. }
  62. r++;
  63. int cat = merged.get(r-1).getB();
  64. if (counter.get(cat) == 0) {
  65. current_classes += 1;
  66. }
  67. counter.set(cat, counter.get(cat) + 1);
  68. } else {
  69. int cur_value = merged.get(r-1).getA() - merged.get(l).getA();
  70. if (cur_value < min_value) {
  71. min_value = cur_value;
  72. min_l = l;
  73. min_r = r;
  74. }
  75. int cat = merged.get(l).getB();
  76. if (counter.get(cat) == 1) {
  77. current_classes -= 1;
  78. }
  79. counter.set(cat, counter.get(cat) - 1);
  80. l++;
  81. }
  82. }
  83. return new Pair(merged.get(min_l).getA(), merged.get(min_r-1).getA());
  84. }
  85.  
  86. public static void main(String[] args) {
  87. List<List<Integer>> lists = Arrays.asList(Arrays.asList(4, 10, 15, 24, 26),
  88. Arrays.asList(0, 9, 12, 20),
  89. Arrays.asList(5, 18, 22, 30));
  90. System.out.println(findMinimumRange(lists));
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement