zoukankan      html  css  js  c++  java
  • 左右最值最大差

    题目来源:牛客网上面的牛课堂系列算法讲座  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]的差必然有一个是解。

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

  • 相关阅读:
    Hive-基本操作
    Hive-安装
    Hive-概述
    游荡二十几天的感想
    js html css
    C#笔试总结
    ubuntu16.04 下 C# mono开发环境搭建
    scoket、TCP、UDP、WebService选型
    虚拟机安装Windows系统,再安装orcale
    Rosetta Stone 不在C盘安装步骤
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/5413922.html
Copyright © 2011-2022 走看看