-2

私のプロジェクトのリリース テストでは、このコードがタイムアウトします。一意のオブジェクトの数に比例した時間しかかからないため、時間を短縮するにはどうすればよいですか?

乱数ジェネレーターを指定して、バッグ内のオブジェクトの分布に従って、バッグから要素をランダムに選択します (たとえば、バッグに 7 つの a と 3 つの b が含まれている場合、70% の確率で a が返され、30% の確率で a が返され、30% の確率で a が返されます)。 bを返す必要がある時間の。

この操作には、バッグ内の一意のオブジェクトの数に比例して時間がかかる場合がありますが、それ以上ではありません。

この操作はバッグには影響しません。@param r 乱数ジェネレータ @return ランダムに選択された要素

public T choose(Random r) {
    ArrayList<T> keyArrayList = new ArrayList<T>();
    int index = 0;
    Iterator<T> it = denseBagMap.keySet().iterator();
    while (it.hasNext()){
         T current = it.next();
         while (index < denseBagMap.get(current)){
             keyArrayList.add(current);
             index++;
         }
         index = 0;
    }
    return keyArrayList.get(r.nextInt(keyArrayList.size()));
}
4

1 に答える 1