Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.junit.Test;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.List;
- public class CourseTest {
- private static class Course {
- public int start;
- public int end;
- public int size;
- public int getStart() {
- return start;
- }
- public int getEnd() {
- return end;
- }
- public int getSize() {
- return size;
- }
- public Course(int start, int end) {
- this.start = start;
- this.end = end;
- this.size = end - start;
- }
- @Override
- public String toString() {
- return "Course{" +
- "start=" + start +
- ", end=" + end +
- '}';
- }
- }
- private List<Course> getMaxCourse(List<Course> courses) {
- courses.sort(Comparator.comparing(Course::getStart));
- List<List<Course>> coursesVariants = new ArrayList<>();
- for(int i =0; i < courses.size(); i++){
- coursesVariants.add(getVariantStartFrom(i, courses));
- }
- coursesVariants.sort(Comparator.comparing(List::size));
- return coursesVariants.get(coursesVariants.size() - 1);
- }
- private List<Course> getVariantStartFrom(int i, List<Course> sortedCourses) {
- List<Course> variant = new ArrayList<>();
- Course minimumSizeCourseWithThisStartDate = sortedCourses.get(i);
- for(; i < sortedCourses.size(); i++) {
- if(sortedCourses.size() - 1 == i){
- if(minimumSizeCourseWithThisStartDate.start < sortedCourses.get(i).start) {
- variant.add(minimumSizeCourseWithThisStartDate);
- minimumSizeCourseWithThisStartDate = sortedCourses.get(i);
- variant.add(sortedCourses.get(i));
- }else {
- if(minimumSizeCourseWithThisStartDate.size > sortedCourses.get(i).size) {
- variant.add(sortedCourses.get(i));
- }
- }
- continue;
- }
- if(minimumSizeCourseWithThisStartDate.size > sortedCourses.get(i).size) {
- minimumSizeCourseWithThisStartDate = sortedCourses.get(i);
- }
- if(minimumSizeCourseWithThisStartDate.start < sortedCourses.get(i).start) {
- variant.add(minimumSizeCourseWithThisStartDate);
- minimumSizeCourseWithThisStartDate = sortedCourses.get(i);
- continue;
- }
- // while(sortedCourses.get(i).start < ){
- // }
- }
- return variant;
- }
- @Test
- public void test() {
- List<Course> course = new ArrayList<>(List.of(new Course(1,2),
- new Course(1,4),
- new Course(2,3),
- new Course(3,4),
- new Course(1,3)));
- List<Course> maxVariant = getMaxCourse(course);
- System.out.println(maxVariant.toString());
- }
- @Test
- public void test2() {
- List<Course> course = new ArrayList<>(List.of(
- new Course(1,4),
- new Course(2,3),
- new Course(3,4)));
- List<Course> maxVariant = getMaxCourse(course);
- System.out.println(maxVariant.toString());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement