求无序数组的(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]
相关文章推荐
- 求无序数组中(max+min)最大的子数组
- 实验9 指针1 1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 求无序数组的(max+min)最大的子数组------为学论坛上面的一道面试题
- 实验9(1)程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- java快速寻找一个数组的最大值或最小值, min, max,三种方法
- js数组最大值max和最小值min
- 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]
- 使用Math.max和Math.min求数组的最大值和最小值
- 实验九指针1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 实验9 指针1 、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依
- js数组最大值max和最小值min
- 取容器中的最大最小值min_element(),max_element()
- 求整数数组中和最大的子数组
- 求数组中和最大的子数组
- 将一个最大max或最小表达式min转为线性表达式
- Max_Sum_of_Sub_Array 连续子数组和最大
- C++ STL之min_element()与max_element()(取容器中的最大最小值)
- Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
- 数组中选第k个最小的数和子数组的最大和
- 首尾相连数组的最大子数组