问题描述
我需要实现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();
}