您的位置:首页 > 其它

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

2012-10-27 00:08 531 查看
题目意思就是,给出一个无序的数组,均为正数,要找一个子数组,使得该子数组内的最小值加上最大值能取到最大。
例子:
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)的解哦[code]
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐