0

2 つの配列を取り、辞書編集的に小さい方を返すメソッドを実装したいと思います。辞書式順序の定義に従って実行しようとしましたが、機能しません。これが私のコードです:

public boolean lexicoSmaller(ArrayList<Integer> list1, ArrayList<Integer> list2)
{
    int m = 1;
    int n = list1.size() -1;


    while(m <= n)
    {
        boolean firstFound = true;
        for(int i=0; i<m; i++)
        {
            if(!Objects.equals(list1.get(i), list2.get(i)))
            {
                firstFound = false;
                break;
            }
        }

        if(firstFound && list1.get(m) < list2.get(m)) return true;
        m++;
    }

    return false;
}

上記のコードは正しい答えを与えません。

たとえば、入力0 5 7 9 14 16 18 231 3 6 11 12 17 20 22の場合、答えは true になるはずですが、false になりました。

4

4 に答える 4

2

2 つの配列がソートされると、任意の i をチェックできます。array1[i] < array2[i] の場合、array1 は辞書的には array2 よりも小さいです。

于 2014-11-21T11:29:47.187 に答える
2

Java 9 以降、Arrays.compareこれを行う標準的な方法が提供されています。

比較Object可能な要素内の 2 つの配列を辞書式に比較します。

Arrays.comparelong、double などの配列用のバージョンもあります。

于 2020-09-28T16:24:21.427 に答える