【python】求数组中两个元素的最小距离?

题目:给定一个数组,数组中含有重复元素,给定两个数组num1和num2,求这两个数字在数组中出现的最小距离。

分析:动态规划法。动态规划的方法可以把每次遍历的结果都记录下来从而减少遍历次数。当遍历数组时,会遇到以下两种情况:

(1)当遇到num1时,记录下num1值对应的数组下标的位置lastPos1,通过求lastPos1与上次遍历到num2下标位置的值lastPos2的差可以求出最近一次遍历到num1与num2的距离。

(2)当遇到num2时,记录下num2值对应的数组下标的位置lastPos2,通过求lastPos1与上次遍历到num2下标位置的值lastPos2的差可以求出最近一次遍历到num1与num2的距离。

code:

def minDis(arr, num1, num2):

    if arr is None or len(arr) <= 0:

        return 2 ** 32

    lastPos1 = -1

    lastPos2 = -1

    minDis = 2 ** 32

    i = 0

    while i < len(arr):

        if arr[i] == num1:

            lastPos1 = i

            if lastPos2 >= 0:

                minDis = min(minDis, abs(lastPos2 - lastPos1))

        if arr[i] == num2:

            lastPos2 = i

            if lastPos1 >= 0:

                minDis = min(minDis, abs(lastPos2 - lastPos1))

        i += 1

    return minDis

if __name__ == "__main__":

    arr = [4, 5, 6, 4, 7, 4, 6, 4, 7, 8, 5, 6, 4, 3, 10, 8]

    num1 = 4

    num2 = 8

    print(minDis(arr, num1, num2))

程序运行结果为:

2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容