# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第4章 数组 4.7 如何求数组中两个元素的最小距离
题目:
给定一个数组,数组中含有重复元素,给定两个数字num1和num2,求这两个数字在
数组中出现的位置的最小距离。
分析:
关键:
1 书上解法
令num1出现的位置为pos1,令num2出现的位置为pos2。
每次出现num1,则更新pos1,并计算|pos1 - pos2|
每次出现num2,则更新pos2,并计算|pos1 - pos2|
2 我之所以没想到
是因为忘记了可以在出现num1或者num2的时候,通过更新
位置,计算位置下标值。
这个实际就是搜索中求包含若干个搜索字符串最近的文章内容。
参考:
Python程序员面试算法宝典
'''
def getMinDistance(array, num1, num2):
if not array:
return
pos1 = -1
pos2 = -1
minValue = float('inf')
size = len(array)
i = 0
while i < size:
if array[i] == num1:
pos1 = i
# 注意,只有pos1和pos2都有值才有比较的意义
if pos2 >= 0:
minValue = min(minValue, pos1 - pos2)
if array[i] == num2:
pos2 = i
if pos1 >= 0:
minValue = min(minValue, pos2 - pos1)
i += 1
return minValue
def process():
array = [4,5,6,4,7,4,6,4,7,8,5,6,4,3,10,8]
result = getMinDistance(array, 4, 8)
print result
if __name__ == "__main__":
process()