实现方法 findSmallestInterval(numbers)
Posted
技术标签:
【中文标题】实现方法 findSmallestInterval(numbers)【英文标题】:Implements the method findSmallestInterval(numbers) 【发布时间】:2021-01-22 06:12:26 【问题描述】:我需要实现 findSmallestInterval (numbers) 方法 它返回 2 个元素之间的最小正区间 numbers 数组(numbers 实际上是一个 int 类型的数组) 例如:如果我考虑数组 [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;
请问有人有解决办法吗?
【问题讨论】:
欢迎来到 Stack Overflow。请阅读How to Ask 并提供minimal reproducible example。我们不是来为您完成工作的,但是当您尝试自己解决问题时,我们可以帮助您解决可能遇到的任何问题。 【参考方案1】:显然,最大的问题是您必须将每个元素与其他元素进行比较,如果您增加 100000 个项目,这可能会非常多。这就是为什么我会先对数组进行排序。由于 java 可以为您做到这一点,您不必担心性能。
Arrays.sort(numbers);
现在您可以比较第一个和第二个并保存输出。现在您对第 2 次和第 3 次执行此操作,并将其与上次的输出进行比较。继续整个数组:
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 个最小元素,但排序后的 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;
【讨论】:
这会找到两个最小数字之间的间隔,而不是数字之间的最小间隔。在初始示例 [1 6 4 8 2] 中,最小的数字 (1,2) 也产生最小的区间。但在后面的示例 1, 6 ,4 ,8 ,9 中,两个较小的数字 (1,4) 的间隔为 3,大于例如之间的间隔。 8 和 9。【参考方案3】:public int findSmallestInterval(int [] numbers )
Arrays.sort(numbers);
return IntStream
.range(0, numbers.length-1)
.map(i -> numbers[i+1] - numbers[i])
.min().getAsInt();
【讨论】:
请考虑在您的答案中添加一些细节,描述您的代码并描述您的代码是如何工作的。【参考方案4】:C# 中的响应:
private static int findSmallestInterval(int[] numbers)
int? minVal = null;
Array.Sort(numbers);//i sorted it
for (int i = 0; i < numbers.Length; i++)
if (i == 0)
continue;
var val = numbers[i] - numbers[i-1];
if (!minVal.HasValue || minVal > val)
minVal = val;
return minVal.Value;
【讨论】:
以上是关于实现方法 findSmallestInterval(numbers)的主要内容,如果未能解决你的问题,请参考以下文章