实现方法 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)的主要内容,如果未能解决你的问题,请参考以下文章

C#关于实现接口,方法重载的问题

是否可以在接口中实现本机方法?

抑制警告“类别正在实现一个方法,该方法也将由其主类实现”

实现多个具有相同方法的接口和父类与实现接口有相同方法

js问题 有两个方法,怎么实现其中一个方法调用另一个方法中的变量?

多线程有几种实现方法?同步有几种实现方法?(被问到)