在差至少为x的数组中找到最接近的两个值

问题描述

任务:给定一个未排序的数组,如何找到最接近的两个值,以使它们的绝对差至少为x(如果数组中没有两个元素的差值,则返回-1 )?

我的方法:我尝试使用滑动窗口方法

  • 我将第一个指针从索引0开始,将第二个指针从索引1开始。
  • 我递增索引1直到获得第一和第二索引处的数组元素之间的差至少为x。
  • 在那之后,我开始增加一个索引直到第二个索引,并跟踪之间的任何值都足够小以匹配至少x的差。
  • 我这样做直到第二个指针到达数组末尾为止。

这是我的示例代码

length = 6
x = 5
arr = [1,1,4,3,7,5]

smallestRange = float('inf')
first = 0
second = 1

while (second < length):
    
    # Keep going until the proper difference is found
    while (second < length and abs(arr[first] - arr[second]) < x):
        second += 1
    
    # No matches are found
    if (second == length):
        break

    # Let first catch up to second
    minVal = first
    while (first != second):
        if (arr[first] <= arr[minVal] and abs(arr[first] - arr[second]) >= x):
            minVal = first
        first += 1
    
    if (minVal != second):
        if (second - minVal < smallestRange):
            smallestRange = second - minVal
    
    second += 1

if (smallestRange == float('inf')):
    smallestRange = -1
print(smallestRange)

问题:这并未涵盖所有可能的情况。例如,如果第一个元素与任何其他元素没有任何绝对差异,则我的第二个指针将直接移到末尾,并且我的代码仅返回-1。我也尝试过手动检查其他输入数组,有时不起作用。我能找到解决此问题的任何指示吗?

该示例应导致打印3,因为1和7是最接近的对,相差至少5。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...