我需要实现findSmallestInterval ( numbers )方法,它返回numbers数组的2个元素之间的最小正间隔(numbers实际上是一个整型数组),例如:如果我考虑数组1 6 4 8 2,最小间隔是1(2和1之间的差异)。
我的约束是: numbers至少包含2个元素,最多包含100,000个项目。更高的表的执行速度的解决方案将获得最多的分数,2个元素之间的差异永远不会超过您的语言的整数的容量
方法如下:
class Solution {
public static int findSmallestInterval (int [] numbers) {
// we write the code here
return 0;
}
}有谁有解决方案吗?
发布于 2020-10-07 18:03:42
显然,最大的问题是你必须将每个元素与其他元素进行比较,如果你增加到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;
}
}发布于 2021-05-16 22:00:04
public int findSmallestInterval(int [] numbers ) {
Arrays.sort(numbers);
return IntStream
.range(0, numbers.length-1)
.map(i -> numbers[i+1] - numbers[i])
.min().getAsInt();
}发布于 2020-10-07 20:10:10
我成功了,我找到了解决方案,我必须对数组进行排序,并区分表中最小的两个元素,但排序后的两个最小元素是numbers和numbers1。因此解决方案是:导入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;
}}
https://stackoverflow.com/questions/64241478
复制相似问题