python自动化测试面试编程题

  • python求最大连续子数组的和
  • 从事python自动化的小伙伴,在面试的时候可能都会遇到这样的编程题,在此总结一下,也是给自己做个备忘录:
  • 给你一个list,求连续子数组和的最大值,这可能是一道测开的题了,有一定的算法在里面,了解一下,也不难。

(1). 第一种解法比较暴力(穷举法),如果需要求出位置这种方法还是不错的。

#encoding=utf-8
# 暴力求解
l = [0, 1, 2, 3, -6, 5, -6,6,-1,2]
def max_sum(l = []):
    #先设定列表的第一个元素为和的最大值
    maxVal =l[0]
    #定义想想想x,y表示列表的下标
    x,y=0,0
    for i in range(0,len(l)):
        for j in range(i,len(l)):
            res = sum(l[i:j+1])
            if res > maxVal:
                maxVal = res
                x = i
                y = j
    return maxVal,x,y
maxVal, x, y = max_sum(l)
print(maxVal,(x,y))

备注:这里要注意sum求列表元素的和,下标是左开右闭的,所以sum(l[i:j+1])这里要j+1不然最后一个取不到。

(2). 动态分治法,因为最大子列表一定是从一个非0的数开始的(假定列表中有正数有负数)所以就可以暂时筛选调小于0的数,即便列表全是负数,那么最大的子列表肯定是负数最大的一个。

def max_L(list=[]):
    #先设定列表的第一个元素为和的最大值
    max_sum = list[0]
    #定义一个变量存储连续的和
    pre_sum = 0
    for i in list:
        #如何这个连续的和小于0,就从i位置重新开始计算
        if pre_sum < 0:
            pre_sum = i
        else:
            pre_sum += i
        if pre_sum > max_sum:
            max_sum = pre_sum
    return max_sum
print(max_L(list))
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值