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,答案应该是正确的,但我得到了错误。

4

4 回答 4

2

当两个数组排序后,我们可以检查任何 i,如果 array1[i] < array2[i] 那么 array1 在字典上比 array2 小。

于 2014-11-21T11:29:47.187 回答
2

字典顺序的定义比您实现的要简单得多。

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

    for(int i = 0; i < n; i++)
    {
        if(list1.get(i) < list2.get(i)) 
        {
            return true;
        }
    }

    return false;
}

笔记。通常你想在比较器中应用这些方法。因为那样你就可以在java集合框架中应用你的比较来对数组等进行排序。所以我宁愿,而不是返回布尔值,而是返回int。进一步来说,

class LexicoComparator implements Comparator<ArrayList<Integer>> {
    @Override
    public int compare(ArrayList<Integer> a, ArrayList<Integer> b) {
        for(int i = 0; i < a.size() && i < b.size(); ++i) {
            int diff = a.get(i) - b.get(i);

            if (diff != 0) {
                return diff;
            }
        }

        return a.size() - b.size();
    }
}
于 2020-03-12T11:51:29.323 回答
2

从 Java 9 开始,Arrays.compare提供了一种执行此操作的标准方法。

Object按字典顺序比较可比较元素内的两个数组。

还有Arrays.compare用于 longs、doubles 等数组的版本。

于 2020-09-28T16:24:21.427 回答
0

// 下面的函数可用于按字典顺序比较两个数组列表。

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

    for(int i = 0; i < n; i++)
    {
        if(list1.get(i) < list2.get(i)) 
        {
            return 1; //list1 is smaller lexicographically
        }
        if(list1.get(i) > list2.get(i))
        {
            return -1; //list2 is smaller lexicographically
        }
    }
    
    return 0;  //list1 and list2 are equal
}
于 2021-05-16T09:18:50.887 回答