当前位置: 首页 > 知识库问答 >
问题:

将两个arraylists排序到一个新的排序列表中

胡鸿羲
2023-03-14

我正在做一个项目,所以我把我的问题简化为:

        int l1ptr = 0;
        int l2ptr = 0;
        while(searchList.size() < 5 || (listOne.get(l1ptr) == null && listTwo.get(l2ptr) == null)){
            if(listOne.get(l1ptr) == null){
                searchList.add(listTwo.get(l2ptr).document);
                l2ptr++;
            }else{
                if(listTwo.get(l2ptr) == null){
                    searchList.add(listOne.get(l1ptr).document);
                    l1ptr++;
                }else{
                    if(listOne.get(l1ptr).frequency < listTwo.get(l2ptr).frequency){
                        searchList.add(listTwo.get(l2ptr).document);
                        l2ptr++;
                    }else{
                        if(listTwo.get(l2ptr).frequency < listOne.get(l1ptr).frequency){
                            searchList.add(listOne.get(l1ptr).document);
                            l1ptr++;
                        }else{
                            searchList.add(listOne.get(l1ptr).document);
                            l1ptr++;
                        }
                    }
                }
            }

任何帮助都将不胜感激。

共有1个答案

马弘益
2023-03-14

如果我理解正确,您想合并两个排序列表,最多5个元素。考虑一下这个广义逻辑:

>

  • 重复,而searchlist.size()<5L1PTR不在第一个列表的末尾,而L2PTR不在第二个列表的末尾

    • 当您有5个元素或到达其中一个列表的末尾时,循环将停止

    searchlist.size()<5l1ptr不在第一个列表的末尾时重复

    • 当您有5个元素或到达第一个列表的末尾时,循环将停止
    • 注意,如果在第一个循环中已经到达了第一个列表的末尾,那么这个循环将什么也不做

    searchlist.size()<5l2ptr不在第二个列表的末尾时重复

    • 当您有5个元素或到达第二个列表的末尾时,循环将停止
    • 注意,如果在第一个循环中已经到达第二个列表的末尾,那么这个循环将不执行任何操作

    最后,您将拥有searchlist,最多包含5个正确排序的元素

    像这样:

    while (searchList.size() < 5 && l1ptr < listOne.size() && l2ptr < listTwo.size()) {
        if (listOne.get(l1ptr).frequency < listTwo.get(l2ptr).frequency) {
            searchList.add(listTwo.get(l2ptr).document);
            l2ptr++;
        } else {
            searchList.add(listOne.get(l1ptr).document);
            l1ptr++;
        }
    }
    
    while (searchList.size() < 5 && l1ptr < listOne.size()) {
        searchList.add(listOne.get(l1ptr).document);
        l1ptr++;
    }
    
    while (searchList.size() < 5 && l2ptr < listTwo.size()) {
        searchList.add(listTwo.get(l2ptr).document);
        l2ptr++;
    }
    

  •  类似资料:
    • 注意:我不想使用任何库。试图解决https://icpc.kattis.com/problems/stacking 在以下条件下,合并排序数组所需的最小操作数是多少: 拆分:可以将单个堆栈拆分为两个堆栈,方法是将堆栈的任何顶部提起并放在一边,形成一个新堆栈。 连接:两个堆栈可以通过将一个放在另一个上面来连接。仅当顶部堆叠的底板不大于底部堆叠的顶板时,才允许这样做,也就是说,必须正确订购连接的堆叠。

    • 问题内容: 已关闭 。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 我想将排序的列表合并到一个列表中。这个解决方案如何?我相信它运行时间为O(n)。有任何明显的缺陷,效率低下或样式问题吗? 我真的不喜欢为“这是第一次迭代”设置标志并使用它来确保“最低”具有默认值的习惯用法。有没有更好的办法解决呢? 注

    • 问题内容: 我确信这个问题以前可能已经被问过,但我似乎找不到正确的答案。如果我有两个清单 我正在尝试使用_list1重新排列_list2中的元素,以便它们完全匹配顺序。什么是最干净的方法?所需的输出: 很抱歉,如果这是重复的,但到目前为止,我只能使用压缩的sorted()方法找到数字列表的答案。 如果_list2是列表列表怎么办? 所需输出: 还有一个假设:如果我想使用_list1作为键对其他任何

    • 问题内容: 我正在寻找Java的良好排序列表。到处搜寻可以给我一些有关使用TreeSet / TreeMap的提示。但是这些组件缺少一件事:随机访问集合中的元素。例如,我想访问排序集中的第n个元素,但是使用TreeSet时,我必须遍历其他n-1个元素,然后才能到达那里。因为我的集合中最多有数千个元素,所以这很浪费。 基本上,我正在寻找与.NET中的排序列表类似的东西,能够快速添加元素,快速删除元素