Я создаю программу на Java 8, которая дает максимальное количество функций, которые человек может посещать за день.т.е. человек может присутствовать только в одной функции в любой заданный интервал времени.
Я пытался написать код, чтобы найти решение, но не смог найти, где я отстаю. Пожалуйста, помогите мне.
Пример ввода: 1 // Количество вводимых дней 5 // Количество функций в приемном дне 14:00 16:00 Принятие ребенка 12:00 14:30 Иннагурация 14:00 16:30 Свадьба 12: 30 13:30 politMeeting 13:30 15: 00
Пример / ожидаемый результат: 2
package problems.functionScheduler;
import static java.time.temporal.ChronoUnit.MINUTES;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Solution {
public class Interval {
public LocalTime begin;
public LocalTime end;
public Interval(LocalTime begin, LocalTime end) {
super();
this.begin = begin;
this.end = end;
}
public LocalTime getBegin() {
return begin;
}
public void setBegin(LocalTime begin) {
this.begin = begin;
}
public LocalTime getEnd() {
return end;
}
public void setEnd(LocalTime end) {
this.end = end;
}
public long timeDifference() {
return MINUTES.between(begin, end);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Solution solutionObject = new Solution();
int t = scanner.nextInt();
IntStream.rangeClosed(1, t).forEach(i -> {
// System.out.println("This is the " + i + "th iteration :");
List<Interval> intervalList = new ArrayList<>();
int n = scanner.nextInt();
scanner.nextLine();
IntStream.rangeClosed(1, n).forEach(j -> {
// System.out.println("This is the " + j + "th value from the " + i + "th
// iteration :");
String[] values = scanner.nextLine().split("\\s+");
// System.out.println(values[0]);
// System.out.println(values[1]);
// System.out.println(values[2]);
intervalList.add(solutionObject.new Interval(LocalTime.parse(values[1]), LocalTime.parse(values[2])));
});
// sorting the list
List<Interval> temp = intervalList.stream()
.filter(interval -> !interval.getBegin().equals(interval.getEnd()))
.sorted(Comparator.comparing(Interval::timeDifference))
// .sorted(Comparator.comparing(Interval::getBegin))
// .sorted(Comparator.comparing(Interval::getEnd))
.collect(Collectors.toList());
// calculateMaxCount(temp.get(0), temp.subList(1, temp.size()));
List<Interval> temp1 = temp;
System.out.println(calculateMaximumCount(temp, temp1));
// temp.forEach(inte -> System.out.println("The begin is "+inte.getBegin()+" and the end is "+inte.getEnd()));
// temp.stream().reduce(new Interval(LocalTime.parse("00:00", "00:00")), (int1, int2) -> Solution.isOverlapping(int1, int2));
// new Interval(LocalTime.parse("00:00"), LocalTime.parse("00:00"));
});
}
private static int calculateMaximumCount(List<Interval> temp, List<Interval> temp1) {
int maximumCount = 0;
for (int m = 0; m < temp.size(); m++) {
int count = 0;
for (int l = m + 1; l < temp1.size(); l++) {
if (isNotOverlapping(temp.get(m), temp1.get(l))) {
count++;
}
}
if (count > maximumCount) {
maximumCount = count;
}
}
return maximumCount;
}
private static boolean isNotOverlapping(Interval interval1, Interval interval2) {
return !interval2.getBegin().isBefore(interval1.getEnd());
}
}
Пример ввода: 1 // Количество вводимых дней 5 // Количество функций в приемной день 14:00 16:00 Принятие ребенка 12:00 14:30 Иннагурация 14:00 16:30 Свадьба 12:30 13:30 Политическая встреча 13:30 15:00
Образец / ожидаемый результат: 2