• 左右最值最大差


    题目来源:牛客网上面的牛课堂系列算法讲座  http://www.nowcoder.com/courses/6/2/3

     

    给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的范围是[0,N-2]。

    求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?

    给定整数数组A和数组的大小n,请返回题目所求的答案。

     

    测试样例:

    [2,7,3,1,1],5

    返回:6

     1 class  MaxGap {
     2 public:
     3     int  findMaxGap(vector<int>  A, int  n) {
     4         int  m = -1;
     5         for(int  i = 0; i < n ;i++){
     6             if(m < A[i])
     7                 m = A[i];
     8         }
     9         return  max((m-A[0]),(m-A[n-1]));
    10     }
    11 };

    分析:假设全局最大值m在左边,那我们就希望右边的最大值越小越好。随着右边那个区间的左端点左移,右边的最大值不会变小,反倒是有可能变大,所以右边那个区间左端点越靠右越好。同理:最大值m划分到右边也类似,要求左边区间的右端点越靠左越好。所以,前n-1个元素的最大值m和A[0]或A[n-1]的差必然有一个是解。

    代码和分析都是网友的贡献,这里仅作笔记。

  • 相关阅读:
    新克隆环境无法创建供应商,报供应商名称已存在
    批处理学习:for语句详解【经典】(转)
    信号与槽引用传递
    串口封装
    tcp客户端封装
    qt无法定位程序输入点 于动态链接库 qt5core.dll
    对象new和不new的理解
    Qt重绘机制
    红绿灯
    获取所有子控件
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/5413922.html
Copyright © 2020-2023  润新知