max(|leftmax-rightmax|)
来源:互联网 发布:南京大汉网络怎么样 编辑:程序博客网 时间:2024/06/03 14:22
题目:
给定一个长度为N(N>1)的整形数组arr,可以划分成左右两个部分,做部分为arr[0..k],右部分为arr[k+1..N-1],k可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分的最大值的绝对值中,最大的是多少?
例如:[2,7,3,1,1]当左边部分为[2,7],右部分为[3,1,1]时,左部分中最大值减去右部分最大值的绝对值为4,当左部分为[2,7,3],右部分为[1,1]时,左部分中的最大值减去右部分最大值的绝对值为6,还有很多划分方案,但是最终返回6.
思路:确实很多划分,暴力方法也很简单,我相信我不用讲,大家都知道暴力方法(遍历出每种组合,O(n2))怎么做,但是这个是个脑筋急转弯,并不需要暴力,我们抛开表面看本质,两个问题:第一个,左边最大,右边最大,那么整个数组最大肯定出自于这两个之一,那么我们就可以用这最大值减去一个数(这个数还要是找出左边或右边最小的最大值)就是最终的答案,第二个问题(找出左边或右边最小的最大值),左边最大,必定跑不出第一个数,当从一个数向后扩时,当出现了比他大的,则大的就是左边最大值,这是我们不希望得到的,要是比第一个小,则第一个还是左边最大值,则我们左边取第一个数,右边最大,同理,取最后一个数,则最终就是整个数组最大值,减去左边右边较小的最大值
public static int maxABS3(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]);}
阅读全文
1 0
- max(|leftmax-rightmax|)
- 最大的LeftMax与rightMax之差绝对值
- [编程题] 最大的LeftMax与rightMax之差绝对值
- 最大的leftMax与rightMax之差的绝对值
- BAT实习内推 最大的LeftMax与rightMax之差绝对值
- 其他题目---最大的leftMax与rightMax之差的绝对值
- 最大的LeftMax与rightMax之差绝对值----BAT实习内推笔试卷(第二场)
- max
- MAX
- max
- max
- max
- max
- max
- max * max
- Max product
- Max error
- air max
- 计算机基础知识
- scrapy爬虫框架结合BeautifulSoup
- 二叉搜索树
- 类和动态分配
- apache-comnons系列之commons-chain1.2 学习笔记
- max(|leftmax-rightmax|)
- [NOI2006]最大获利
- win7下虚拟机安装ubuntu
- 构建vue全家桶项目-构建
- 数据结构之链表反转
- 文本相似度 -- 最小编辑距离算法
- Android Studio 错误 Plugin Error
- C
- 二叉树的前序遍历,中序遍历,后序遍历以及相互之间的求法