实现方法findSmallestIntervalnumbers

问题描述

我需要实现findSmallestInterval(numbers)方法 它返回两个元素之间的最小正区间 数字数组(数字实际上是int类型的数组) 例如:如果我考虑数组[1 6 4 8 2],则最小 间隔为1(2与1之间的差)。

我的约束是: 数字包含至少2个元素,并且 最多100,000个项目。 有利于表执行速度的解决方案 高个子将获得最高分 2个元素之间的差异永远不会超过容量 您的语言的整数

方法如下:

class Solution {

    public static int findSmallestInterval (int [] numbers) {
        // we write the code here
        return 0;
    }
}

请问有人有解决办法吗?

解决方法

public int findSmallestInterval(int [] numbers ) {
        Arrays.sort(numbers);
        return IntStream
                .range(0,numbers.length-1)
                .map(i -> numbers[i+1] - numbers[i])
                .min().getAsInt();
        
    }
,

最大的问题显然是您必须将每个元素相互比较,如果您最多购买100000个项目,这可能会很不明智。那就是为什么我会先对数组进行排序。由于Java可以为您完成此操作,因此您不必担心性能。

Arrays.sort(numbers);

现在您可以比较第一个和第二个并保存输出。现在,您对第二和第三进行此操作,并将其与上次的输出进行比较。在整个数组中继续进行此操作:

int diff = numbers[1] - numbers[0];
int diffNeu;

for(int i = 1; i < numbers.length-1; i++)
{
    diffNeu = numbers[i + 1] - numbers[i];
    if(diffNeu < diff)
    {
        diff = diffNeu;
    }
}
,

我把它钉住了,我找到了解决方案,我必须对数组进行排序并区分表的2个最小元素,但排序后的2个最小元素是数字[0]和 数字[1]。 所以解决方案是: 导入java.util.Arrays;

公共类FindSmallestInterval {

public static void main(String[] args) {
    
    int[] numbers= {1,6,4,8,9};
    System.out.println(findSmallestInterval(numbers));


}

 public static int findSmallestInterval (int [] numbers) {
        // we write the code here
     
     Arrays.sort(numbers);//i sorted it
     int smallestInterval = numbers[1] - numbers[0];
    return smallestInterval;
     
    
    }

}

,

public int findSmallestInterval(int [] numbers ) { Arrays.sort(numbers); 返回 IntStream .range(0,numbers.length-1) .map(i -> numbers[i+1] - numbers[i]) .min().getAsInt();

}