java中两个数组的字典比较

时间:2014-11-14 10:23:55

标签: lexicographic

我想实现一个方法,它接受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 个答案:

答案 0 :(得分:1)

当两个数组被排序时,我们可以检查任何i,如果array1 [i]&lt; array2 [i]然后array1在字典上小于array2。

答案 1 :(得分:0)

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

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();
    }
}

答案 2 :(得分:0)

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

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

还有Arrays.compare的版本,用于多头,双头等阵列。

答案 3 :(得分:0)

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

 <script>
    
  window.onload = function(event) {

    let val= document.querySelector('.download')
  
    val.addEventListener("click",(e)=>{

    let url="{{config('yourstitchart.file_url')}}"
    
    let files ={!! $digitizingInbox->file  !!}
    var zip = new JSZip();
    var img = zip.folder("images");

    files.forEach(element => {
      const imageBlob = url + element;
      
      img.file(element, imageBlob);

    });
      zip.generateAsync({type:"blob"})
          .then(function(content) {
           //see FileSaver.js
           saveAs(content, "yourstitchart.zip");
           });
    });
   }
</script>