我不确定如何正确地说出这一点,但我被告知写一个方法可以返回最大的课程对象(该课程的学生人数最多)。如果有两门课程的学生数量相同,那么两者都会返回。
问题的第二部分是困扰我的,因为我不允许制作另一个ArrayList
而不是他指定的(已经使用过)。有没有办法在不使用list / hash的情况下跟踪两个+对象?
这是我到目前为止所做的,但它只返回一个课程对象。
public Course largestEnrollment(){
int size = 0;
Course p = null;
for (Integer c : courseList.keySet()){
if (courseList.get(c).getClassList().size() > size){
p = courseList.get(c);
size = courseList.get(c).getClassList().size();
}
return p;
}
return null;
}
答案 0 :(得分:2)
返回Course
个对象数组:
public Course[] largestEnrollment(){
您需要决定如何在for
循环中操作数组。
答案 1 :(得分:1)
根据尺寸对ArrayList
进行排序。然后你可以返回sub-list个最大的课程。
答案 2 :(得分:1)
如果您没有那么多Course
(例如< 1k),则可以为Comparable
对象实施Comparator
或写Course
。因此,您可以从地图中获取集合中的所有值(课程),然后对集合进行排序,只需从已排序集合的末尾对具有相同值(大小)的元素进行排序。
我提到了集合的大小,因为sort会将O(n)
问题转换为O(nlogn)
。但如果尺寸很小,这是一种方便的方式。
无论如何,您必须将方法返回类型更改为集合或数组。
答案 3 :(得分:1)
排序然后返回子列表:
public List<Course> largestEnrollment(List<Course> courses) {
Collections.sort(courses, new Comparator<Course>() {
@Override
public int compare(Course o1, Course o2) {
return o1.getClassList().size() - o2.getClassList().size();
}
});
for (int indexOfLargest = 1; indexOfLargest < courses.size(); indexOfLargest ++) {
if (courses.get(indexOfLargest - 1).getClassList().size() > courses.get(indexOfLargest).getClassList().size())
return courses.subList(0, indexOfLargest);
}
return courses;
}