码迷,mamicode.com
首页 > Web开发 > 详细

最大的LeftMax与rightMax之差绝对值

时间:2015-03-13 00:19:37      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

  这两天去 牛客网 混了下,遇到的几道题都很有意思,尤其是今晚这道,比赛时不会做,后来看了别人的代码才突然想通的,题目链接:

最大的LeftMax与rightMax之差绝对值,大意是:

技术分享

  想了一晚都没想出,后来看了别人精简的代码后才想通,然后自己用C++写了下也过了:

技术分享

  至于算法思路,为了给一个群友说清楚码了一大堆字,好累,后来想截图时却发现聊天记录没有了气泡模式,还是适当复制粘贴一下吧:

  首先选出的左右两部分的那两个最大的数,其中一个肯定是整个数组中最大的数,它可能被分在左边或右边,假设它在左边的话,那么只需要使右边那部分的最大的数最小就行,这样就能得出答案。而右边那部分一定包含数组最右边那个数(k的边界条件),假设刚才已找出的整个数组中最大的数下标为k,最右边那个数的下标为len-1,假设在len-1前到k这段区间中的数都比vec[len-1]小,那么答案就是vec[k]-vec[len-1],若果这段区间内有比vec[len-1]大的,那么就把它归入左边部分,这样子左边部分最大值还是vec[k],而右边部分最大值还是vec[len-1],所以这样子最终答案就是vec[k]-vec[len-1]。同理,当vec[k]在右边部分时可以得出答案为vec[k]-vec[0],所以最终答案就是 max( Max-vec[0], Max-vec[len-1] ) 了。

最大的LeftMax与rightMax之差绝对值

标签:

原文地址:http://www.cnblogs.com/Newdawn/p/4334058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!