Python 分治+递归 求列表的最大值次大值

最大次大值问题发现网上Python版本的实现比较少,自己实现了一个

分治法很常见了,注意下分治包括了“分而治之”和“减而治之”,两者的目的都是为了减少问题的规模


递归,首先要考虑“递归基”,也就是递归的出口;

平凡方法,粗放的解释就是“可以一步就看出结果”的代码块;



def maxAndSubMax(seq):
	if len(seq) == 1:
		return seq[0], seq[0]
	if len(seq) == 2:
		if seq[0] > seq[1]:
			return seq[0], seq[1]
		else:
			return seq[1], seq[0]

	x1L, x2L = maxAndSubMax(seq[:len(seq)//2])
	x1R, x2R = maxAndSubMax(seq[len(seq)//2:])

	if x1L > x1R :
		if x2L > x1R:
			return x1L, x2L
		else:
			return x1L, x1R
	else:
		if x1L > x2R:
			return x1R, x1L
		else:
			return x1R, x2R 




if __name__ == '__main__':
	testlist = [1,3,56,7,8,10,9,8,45]
	print maxAndSubMax(testlist)


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值