-1

これを正しく表現する方法はわかりませんが、最大のコースオブジェクト(最も多くの学生がいるコース)を返すメソッドを作成するように言われています。学生数が同じであるコースが2つある場合、両方が返されます。

ArrayList問題の2番目の部分は、彼が指定したもの(すでに使用されているもの)以外のものを作成することは許可されていないため、私を悩ませているものです。リスト/ハッシュを使用せずに2つ以上のオブジェクトを追跡する方法はありますか?

これは私がこれまでに行ったことですが、1つのコースオブジェクトしか返しません。

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;        
}
4

4 に答える 4

2

オブジェクトの配列を返しCourseます:

public Course[] largestEnrollment(){

forループ内で配列を操作する方法を決定する必要があります。

于 2013-03-14T19:41:20.347 に答える
1

ArrayListサイズに基づいて並べ替えます。次に、最大のコースのサブリストを返すことができます。

于 2013-03-14T19:44:05.947 に答える
1

それほど多くない場合Course(例: <1k)、オブジェクトに対して を実装Comparableまたは作成できます。マップからコレクション内のすべての値 (コース) を取得し、コレクションを並べ替えることができるように、並べ替えられたコレクションの最後から、同じ値 (サイズ) を持つ要素を取得します。ComparatorCourse

O(n)問題を に分類するため、コレクションのサイズについて言及しましO(nlogn)た。でもサイズが小さいと便利ですよね。

とにかく、メソッドの戻り値の型をコレクションまたは配列に変更する必要があります。

于 2013-03-14T19:46:53.207 に答える
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;
}
于 2013-03-14T20:52:40.840 に答える