我想实现一个方法,它接受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 23
和1 3 6 11 12 17 20 22
,答案应该是真的,但我得到了假。
发布于 2014-11-21 19:29:47
当两个数组排序后,我们只需检查任何i,如果array1i < array2i,则array1在词典上小于array2。
发布于 2020-03-12 19:51:29
字典顺序的定义比你已经实现的要简单得多。
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,而不是返回boolean。更确切地说,
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();
}
}
发布于 2021-05-16 17:18:51
//下面的函数可用于按字典顺序比较两个数组列表
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
}
https://stackoverflow.com/questions/26927781
复制相似问题