1

「ボックス化」された整数を ArrayList に検索し、最小値をリストの先頭に入れようとしています。ただし、新しい分がある場合は前面に配置していないようです。

以下にいくつかの例を示します。たとえば、list という変数に次の値が格納されているとします: {3, 8, 92, 4, 2, 17, 9} で、次の呼び出しを行います: minToFront(list); 呼び出し後に次の値を格納する必要があります: {2, 3, 8, 92, 4, 17, 9} リストには少なくとも 1 つの値が格納されていると想定されます。

private static void minToFront(ArrayList<Integer> thing) {
    int tempMin = Integer.MAX_VALUE;
    for (int i = 0; i < thing.size(); i++) {
        if (tempMin < thing.get(i)) {
            thing.add(0,thing.get(i));
            thing.remove(i+1);
            i++;
        }
    }
}
4

2 に答える 2

3

あなたの論理は少しずれています。あなたのif文を見てください:

if (tempMin < thing.get(i)) {

リスト要素が最大の int 値よりも大きいかどうかを尋ねていますが、これは決して真ではありません。最小値とその位置を見つけるには、リストを 1 回完全に走査してから、リストを操作する必要があります。

if (thing.size() < 2)  // special case
    return;

int min = thing.get(0), minLoc = 0;

for (int i = 1; i < thing.size(); i++) {
    int next = thing.get(i);

    if (next < min) {
        min = next;
        minLoc = i;
    }
}

thing.add(0, thing.remove(minLoc));
于 2013-10-05T03:03:43.520 に答える