Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写一个O(n^2)方法来查找两点之间的最大距离_Java_Arrays_Algorithm - Fatal编程技术网

Java 如何编写一个O(n^2)方法来查找两点之间的最大距离

Java 如何编写一个O(n^2)方法来查找两点之间的最大距离,java,arrays,algorithm,Java,Arrays,Algorithm,我有一个数组int[]nums={5,1,6,10,4,7,3,9,2} 我想在O(n^2)时间内找到数组中最小和最大数字之间的距离。根据作业要求,它需要是O(n^2)时间。为此,我正在编写一个名为quadratic的方法。到目前为止,我已经想出了下面的代码 public static int quadratic(int[] nums) { int max = nums[0]; int min = nums[0]; for (int i = 0; i < num

我有一个数组
int[]nums={5,1,6,10,4,7,3,9,2}

我想在O(n^2)时间内找到数组中最小和最大数字之间的距离。根据作业要求,它需要是O(n^2)时间。为此,我正在编写一个名为
quadratic
的方法。到目前为止,我已经想出了下面的代码

public static int quadratic(int[] nums) {

    int max = nums[0];
    int min = nums[0];

    for (int i = 0; i < nums.length; i++) {
        for (int j = 0; j < nums.length; j++) {

            if (nums[i] > nums[j])
                max = nums[i];
            else if (nums[i] < nums[j])
                min = nums[i];  
            }
        }

    int maxDifference = max - min;
    return maxDifference; 
}
公共静态整数平方(int[]nums){
int max=nums[0];
int min=nums[0];
对于(int i=0;inums[j])
max=nums[i];
else if(nums[i]
问题是,当我使用上面提到的数组运行该方法时,最大差值为0。我预计是9,因为最大的数字是10,最小的是1。10-1=9


我的问题是,有人能告诉我如何更改代码,使其正确计算最小和最大数字之间的最大距离吗?

对于数字(与平面上的点相反),您可以在线性时间内这样做。求最大值,求最小值,然后减去。因此,不需要嵌套循环。

对于数字(与平面上的点相反),可以在线性时间内完成。求最大值,求最小值,然后减去。因此,不需要嵌套循环。

您正在覆盖最大值和最小值

if (nums[i] > nums[j])
    max = nums[i];
else if (nums[i] < nums[j])
    min = nums[i];  
}

您正在覆盖最大和最小值

if (nums[i] > nums[j])
    max = nums[i];
else if (nums[i] < nums[j])
    min = nums[i];  
}

溶液甚至可以是O(2n);那么它真的需要是O(n^2)吗?在这种情况下,对于这个特定的赋值,它需要是O(n^2)。这里有一个简单的调试技巧(虽然这不是最好的方法),在for循环中打印出以下内容:
i,j,nums[i],nums[j],min,max
。最好将其放在if-else块之后。在调试后一定要删除那一行代码。我试图想出一种愚蠢但“自然”的方法,让它自然地二次化,而不是表面上把它膨胀到二次复杂度,因为这个问题真的想在线性时间内解决。如果没有一些表面上被认为是愚蠢的聪明东西,那么可能有一种方法是对数据进行冒泡排序,然后输出第一个和最后一个元素之间的差异。这将是一个天生愚蠢的解决方案,而不是表面上愚蠢的解决方案,我想教授会更欣赏天生愚蠢。好主意!我打算这样做。谢谢溶液甚至可以是O(2n);那么它真的需要是O(n^2)吗?在这种情况下,对于这个特定的赋值,它需要是O(n^2)。这里有一个简单的调试技巧(虽然这不是最好的方法),在for循环中打印出以下内容:
i,j,nums[i],nums[j],min,max
。最好将其放在if-else块之后。在调试后一定要删除那一行代码。我试图想出一种愚蠢但“自然”的方法,让它自然地二次化,而不是表面上把它膨胀到二次复杂度,因为这个问题真的想在线性时间内解决。如果没有一些表面上被认为是愚蠢的聪明东西,那么可能有一种方法是对数据进行冒泡排序,然后输出第一个和最后一个元素之间的差异。这将是一个天生愚蠢的解决方案,而不是表面上愚蠢的解决方案,我想教授会更欣赏天生愚蠢。好主意!我打算这样做。谢谢对于这个特殊的作业,它实际上需要在O(n^2)时间内。对于这个特殊的作业,它实际上需要在O(n^2)时间内。谢谢!这就很好地解释了。谢谢!这很好地解释了这一点。