【问题标题】:Implements the method findSmallestInterval(numbers)实现方法 findSmallestInterval(numbers)
【发布时间】:2025-12-21 16:40:12
【问题描述】:

我需要实现 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。我们不是来为您完成工作的,但是当您尝试自己解决问题时,我们可以帮助您解决可能遇到的任何问题。

标签: java arrays intervals


【解决方案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;
        }
    

    【讨论】:

      最近更新 更多