大数跨境

测试开发成长课堂——第三期

测试开发成长课堂——第三期 慧测
2019-08-19
2
导读:慧测微课程活动正式启动。持续关注慧测,每天进步一点!



慧测微课程活动正式启动。持续关注慧测,每天进步一点!


讲师:张老师

本期语音讲解




各位测试界小伙伴们:


大家好,我是慧测的张老师,


欢迎大家参加慧测的2019年系列微课程活动。


本套课程主要分为两部分内容:


《每期一道名企面试题分析》


《每期5分钟测试开发小课堂》


目的是让大家利用好碎片化时间,每天积累一点技术。


今天是我们《每期一道名企面试题分析》微课程的第3期内容。


题目


用Python写一个函数, 从一个整型列表中找到两个元素间的最小差值,

输出这个最小差值,和对应的两个元素的下标。



1.根据函数功能,我们可以给这个函数命名为find_min_diff, 形参应代表一个整型数组,我们把它命名为numbers。


def find_min_diff(numbers):

pass


2. 如果我们要找的是一个列表中的最小值,在不能使用系统内建函数min的情况下,通常的思路是,假定第一个数是最小的,它的下标0记为最小值对应的下标。


然后循环遍历一遍列表,每次遍历到的元素,都和当前的最小值进行比较;


如果比最小值还小,就把这个元素的值记为最小值,把它的下标记为最小值对应的下标。


如果遍历到的元素不比当前最小值值小,就不做操作。大家可以暂停播放,浏览一下这段代码。


def find_min_num(numbers):

    min_num = numbers[0]

    min_index = 0

    for i in range(len(numbers)):

        if numbers[i] < min_num:

            min_num = numbers[i]

            min_index = i

    print('最小值是%d,它的下标为%d'% (min_num, min_index))


现在的题目,要求找的是两个元素的最小差值,我们可以先假定:


第1个数减去第2个数之间差值是最小的,它们的下标0和1记为最小差值的两个元素对应的下标。


def find_min_diff(numbers):

    diff = numbers[0] - numbers[1]

    id1 = 0

    id2 = 1

    pass


然后循环遍历列表,元素之间两两组对,计算差值。


每次计算出的差值,都和当前的最小差值进行比较;


如果比最小差值还小,就把新求得的差值记为最小值,把新的两个元素的下标记为最小差值对应元素的下标。


如果求得的差值不比当前值小,就不做操作。


每次求一个差值,我们需要先指定一个被减数,这个被减数应该从列表的第1个元素开始,一直到最后一个元素。


所以需要一个循环来控制,使用range(len(numbers))来表示被减数的下标的范围。


也就是:


def find_min_diff(numbers):

    diff = numbers[0] - numbers[1]

    id1 = 0

    id2 = 1

for i in range(len(numbers)):

pass


因为两个数之间的差值有正负,所以被减数和减数之间交换位置后值不相等,所以每确定了一个被减数,列表中所有元素都需要充当一次减数,而不用考虑排除掉已用过的数。


也就是说,减数的范围也是从列表的第1个元素开始,一直到最后一个元素。


也就是内层嵌套一个循环,用一个变量表示减数的下标,范围也是


range(len(numbers))。

def find_min_diff(numbers):

    diff = numbers[0] - numbers[1]

    id1 = 0

    id2 = 1

    for i in range(len(numbers)):

         for j in range(0, len(numbers)):

pass


有一个特殊情况,就是减数与被减数下标相同。


这种情况是可以在循环内部通过if条件排除的,但不排除对结果也没有影响;


因为自己跟自己求差结果一定是0,只要列表中有任意两个元素不相同,就一定存在比0小的差值,所以求出的0对结果没有影响。


如果所有元素都相同,则不需要对diff、id1和id2重新赋值,结果中会显示下标为0和1的元素之间差值最小。这个结果也正确。


    按照上面的分析过程,我们可以把代码完成。


def find_min_diff(numbers):

    diff = numbers[0] - numbers[1]

    id1 = 0

    id2 = 1

    for i in range(len(numbers)):

             for j in range(0, len(numbers)):

                if numbers[i] - numbers[j] < diff:

                    id1 = i

                    id2 = j

                    diff = numbers[i] - numbers[j]

        print(id1,id2,diff)

num = [2,3,13,7,13]

find_min_diff(num)


完成后,你可以再思考下,如果题目要求中差值改成绝对值,你应该对代码做什么相应的改动呢?


 以上就是今天面试题分享的全部内容









-END-





上期回顾:


测试开发成长课堂——第二期

测试开发成长课堂——第一期






欢迎加入慧测学习社区





欢迎加入我们:

慧测官网:www.huicewang.com

慧测Python群:324015481

公开课服务群:623636110

咨询QQ:2657535456

咨询微信号:huice666


慧测腾讯课堂 课程地址

















【声明】内容源于网络
0
0
慧测
专注人工智能前沿技术落地企业实战应用
内容 404
粉丝 0
慧测 专注人工智能前沿技术落地企业实战应用
总阅读104
粉丝0
内容404