Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Comparator;
- import java.util.List;
- class Pair {
- private final Integer a;
- private final Integer b;
- Pair(Integer a, Integer b) {
- this.a = a;
- this.b = b;
- }
- public Integer getA() {
- return a;
- }
- public Integer getB() {
- return b;
- }
- @Override
- public String toString() {
- return "Pair{" +
- "a=" + a +
- ", b=" + b +
- '}';
- }
- }
- public class Application {
- private static Pair findMinimumRange(List<List<Integer>> lists) {
- int m = lists.size();
- List<Pair> merged = new ArrayList<>();
- for (int i = 0; i < lists.size(); i++) {
- List<Integer> list = lists.get(i);
- for (Integer integer : list) {
- merged.add(new Pair(integer, i));
- }
- }
- merged.sort(Comparator.comparingInt(Pair::getA));
- ArrayList<Integer> counter = new ArrayList<>();
- for (int i = 0; i < lists.size(); ++i) {
- counter.add(0);
- }
- int current_classes = 0;
- int l = 0;
- int r = 0;
- int min_value = merged.get(merged.size()-1).getA() - merged.get(0).getA();
- int min_l = 0;
- int min_r = merged.size() - 1;
- while (true) {
- if (current_classes < m) {
- if (r == merged.size()) {
- break;
- }
- r++;
- int cat = merged.get(r-1).getB();
- if (counter.get(cat) == 0) {
- current_classes += 1;
- }
- counter.set(cat, counter.get(cat) + 1);
- } else {
- int cur_value = merged.get(r-1).getA() - merged.get(l).getA();
- if (cur_value < min_value) {
- min_value = cur_value;
- min_l = l;
- min_r = r;
- }
- int cat = merged.get(l).getB();
- if (counter.get(cat) == 1) {
- current_classes -= 1;
- }
- counter.set(cat, counter.get(cat) - 1);
- l++;
- }
- }
- return new Pair(merged.get(min_l).getA(), merged.get(min_r-1).getA());
- }
- public static void main(String[] args) {
- List<List<Integer>> lists = Arrays.asList(Arrays.asList(4, 10, 15, 24, 26),
- Arrays.asList(0, 9, 12, 20),
- Arrays.asList(5, 18, 22, 30));
- System.out.println(findMinimumRange(lists));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement