【算法证明含证明过程】数组左部分中的最大值减去右部分最大值的绝对值,最大是多少?
来源:互联网 发布:手机淘宝领取淘金币 编辑:程序博客网 时间:2024/05/19 20:22
算法步骤:1. 求出数组中最大的元素,记为MAX;2. 记MIN = min(arr[0],arr[arr.length-1]);3. MAX - MIN即为所求。
证明如下:记左部分最大值和右部分最大值中较大的一个为bigMax,较小的一个为smallMax。由题即求bigMax-smallMax的最大值。由式bigMax-smallMax可知,bigMax越大,smallMax越小则bigMax-smallMax值越大。故bigMax必为数组中的最大值,记为MAX。假设现在以MAX作为划分点,并假设MAX左右均有元素存在(若MAX为arr[0]或arr[arr.length-1]同理)。现在考虑以MAX为划分时,左部分的情况:将左部分分为arr[0]和从arr[0]到MAX的两部分,若arr[0]是左部分的最大值,则smallMAX就选arr[0](在这种情况下,假设不以MAX为划分,而以MAX左边的某一个元素划分,由于必有smallMAX<MAX,smallMAX仍要选arr[0])。否则若arr[0]不是左部分的最大值,由于要使得smallMAX越小越好而此时左部分的最大值必然是存在于arr[1]到MAX之间的某个值,只有选arr[0]为smallMAX并以arr[1]为划分才能使得bigMax-smallMax值越大(可以证明,除此之外的划分无论如何仍然要选arr[0]为smallMAX)。综上,左部分的最大值无论如何都是选arr[0]。另外,若要使得某一部分的值既是这一部分的最大值,又是这一部分的最小值。那么只有当这一部分只含有一个元素时,这个元素同时满足这两个条件。同理可证明右部分最大值无论如何都是选arr[arr.length-1]。综合考虑smallMax= min(arr[0],arr[arr.length-1])。由此得证。
public int getMaxABSLeftAndRight(int[] arr) { int max = Integer.MIN_VALUE; for (int i = 0; i < arr.length; i++) { max = Math.max(arr[i], max); } return max - Math.min(arr[0], arr[arr.length - 1]); }
- 【算法证明含证明过程】数组左部分中的最大值减去右部分最大值的绝对值,最大是多少?
- 左部分中的最大值减去右部分最大值的绝对值最大
- 求数组左部分最大值减去右部分最大值的绝对值的最大值
- 含绝对值不等式的证明
- 找出有序数组中的绝对值的最大值
- 部分背包问题的贪心算法正确性证明
- 算法概论8章,部分习题证明
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- RSA算法证明-证明过程
- 最大值减去最小值小于等于num的子数组数量
- number的最大值是1.0 x 10E126证明
- 数组左部分为奇,右部分为偶
- 信息论及其若干结论和部分证明过程
- 左神的书——《程序员代码面试指南》之最大值减去最小值小于或等于num的子数组的数量 c++实现
- 栈空间的最大值是多少
- 连续子数组的和的最大值、最小值以及和的绝对值的最大值、最小值
- 连续子数组的和的最大值、最小值以及和的绝对值的最大值、最小值
- 程序猿日常-3
- 构造函数和析构函数概述
- VS2010编译arthurv的C++版OpenTLD
- Cocos2d-X的多分辨率支持(2)
- 模拟银行账户转账系统(简单模拟)
- 【算法证明含证明过程】数组左部分中的最大值减去右部分最大值的绝对值,最大是多少?
- 92. Reverse Linked List II
- poj 2226 hungary(铺木板)
- Services 综合介绍
- HDU 1003 DP
- assert
- Incompatible pointer types assigning to 'NSMutableArray *' from 'NSArray *'
- 安装配置树莓派的最佳工具——NOOBS
- 通用漏洞提交格式说明