微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在差至少为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 举报,一经查实,本站将立刻删除。