求无序数组的(max+min)最大的子数组

题目意思就是,给出一个无序的数组,均为正数,要找一个子数组,使得该子数组内的最小值加上最大值能取到最大。
例子:
	3 9 2 7 1 5 8 
能取到的(max+min)最大的子数组为(5,8)。

    仔细观察就能发现,求这个子数组的一个要点就是最小值的位置。如上面例子所示,最小值为 1,那么如果 1 被包含进子数组的话,最大也只能取到 1+max,这不如max加上另外任意一个值。
    OK,有了这个发现事情就好办了;还记得快排的partition函数吗?做完一次partition后,pivot元素的左右两边分别排序就行了,不会跨越pivot所在位置;类似的,找到最小值后,子数组的最优选择肯定也不会跨越该最小值所在位置。
    写成表达式是 T(n)=2T(n/2)+n;这也是快排最优情况下的解;为O(nlogn),已经很优了,平均也是O(nlogn),最坏O(n^2)。

好了,问题到这里就解决了!
是否有更优的解答呢?看你是否足够细心和聪明啦 ~ ~ 据说有O(n)的解哦
 
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值