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

Java——比较一长串整数

庄文栋
2023-03-14

我的代码超时了,因为它效率低下。程序接受一行n个整数。每对连续的整数代表一个点(x,y)。这是一个输入示例

-5 -10 20 25 30 2 -1 -40

输出:

java.awt.Point[x=-5,y=-10]
java.awt.Point[x=-1,y=-40]
java.awt.Point[x=20,y=25]
java.awt.Point[x=30,y=2]
4

我有代码来排序所有的点。它们从最小到最大排序。如果"x"值相等,则检查y值。问题是:我需要计算一个点比其他点(x和y)大多少倍。所以在上面的例子中,答案是4。

>

第三点比第一点和第二点大。

结果是4。

如果点相等,也增加计数器。

对于非常长的整数行,我的程序超时(终止)。我不能在这里提供输入,因为它太长了。我还能如何提高复杂性?

public void calculateDomination(){
        int counter =0;
        int sizeOfList = this.coordinateList.size();
        for(int i = 0; i < sizeOfList ; i++){
            for(int j = i+1; j < sizeOfList ; j++){
                if(((this.coordinateList.get(i).x) < (this.coordinateList.get(j).x)) && ((this.coordinateList.get(i).y) < (this.coordinateList.get(j).y)) ){
                    counter++;
                }
                else if(((this.coordinateList.get(i).x) == (this.coordinateList.get(j).x)) && ((this.coordinateList.get(i).y) == (this.coordinateList.get(j).y)) ){
                    counter++;
                }
            }
        }
        System.out.println(counter);
    }

共有1个答案

燕扬
2023-03-14

我发布的第一个想法现在被删除了,但实际上不起作用。真正起作用的是:

对遇到的y值进行增量排序/计数:

在浏览列表时,维护迄今为止遇到的所有y值的TreeMultiset。在每个点上,检查当前y值之前节点的headMultiset()size()。由于只有x值较低的点的值会被添加到它,这将给出当前点的计数。

我认为TreeMultiset的所有相关操作都是O(log(n)),因此这将使算法从O(n^2)下降到O(n*log(n))。

 类似资料:
  • 问题内容: 我有一个String和一个int,可以说:和。什么是如果它们是相同的,看到的最快的方法还是(或者是有一个更快的方法?)? 这是Integer.parseInt和String.equals的源代码 问题答案: 会比 首先将num转换为O(n)的字符串,其中n是数字中的位数。然后它将再次进行字符串连接O(n),然后最终进行字符串比较。在这种情况下,字符串比较将是另一个O(n)-n是数字中的

  • 我在客户端将一些参数存储在HTML中,然后需要将它们作为整数进行比较。不幸的是,我遇到了一个我无法解释的严重错误。bug似乎是我的JS将参数作为字符串而不是整数读取,导致我的整数比较失败。 我生成了一个错误的小例子,我也无法解释。运行时,以下返回“true”:

  • 我已经声明了一个实现可比较接口和compareTo方法的类,使用employee ID比较两个员工。创建的类对象插入数组列表。现在,当我使用collections.sort(arrayList对象)时,它工作得很好。我对collective和comparator接口之间的比较有何不同感到困惑。我想知道如何在纯粹由数字组成的employee id字符串和其他字符串employee id之间进行比较,

  • 问题内容: 在Java中整数比较是棘手的,因为和表现不同。我明白了。 但是,如本示例程序所示, (第4行)的 行为不同于 (第3行) 。为什么是这样?? 结果 问题答案: 从JLS 如果装箱的值p为true,false,字节或\ u0000到\ u007f范围内的char或-128到127(含)之间的整数或短数,则令r1和r2为p的任何两次拳击转换。r1 == r2总是这样。 理想情况下,将给定的

  • 我有一个充满整数的列表: 现在我想将最高分数与每个分数进行比较,看看哪个分数最高。直觉上,我试着这样做: 然而 所有人都告诉我错误: Compariable和int操作数类型不兼容 然而,这似乎是可行的: 那怎么可能呢? 为什么Java允许将int设置为集合。max(集合),但不允许将int与集合进行比较。最大值(集合)?

  • 问题内容: 我一直在尝试使用org.apache.commons.beanutils库获取方法/习惯用法,以评估2个实例之间的 所有 属性是否相等,即bean的常规equals()方法。 有没有简单的方法可以使用此库?还是我走错路了?谢谢。 问题答案: 尝试EqualsBuilder.reflectionEquals()的公共浪。EqualsBuilder具有一组方法来包括所有字段,所有非瞬态字段