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