zoukankan      html  css  js  c++  java
  • 数组中的最长山脉【845】

    我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:

    • B.length >= 3
    • 存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)

    给出一个整数数组 A,返回最长 “山脉” 的长度。

    如果不含有 “山脉” 则返回 0。

    示例 1:

    输入:[2,1,4,7,3,2,5]
    输出:5
    解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。
    

    示例 2:

    输入:[2,2,2]
    输出:0
    解释:不含 “山脉”。
    

    提示:

    0 <= A.length <= 10000
    0 <= A[i] <= 10000
    

    思路:

          由于只能扫描一次,所以要判断出哪些点不能作为山头,而且要能区别不同的山头(包括上坡段和下坡段),我们从头扫描数组,记录两个变量up和down,记录到当前下标i时,上坡和下坡有多长。
    up和down在以下两个条件成立时会被归为0。    
          A[i] == A[i + 1] or ( down > 0 && A[i] < A[i +1] )
          条件的意思是如果前后两个值相等A[i] == A[i+1],那么不管是上坡还是下坡截止到当前第i个元素得到的up和down都是无效的,所以必须归为0。如果当前正在下坡路段down>0
    但是突然有个元素不满足下坡时后一个元素小于前一个元素的特性(A[i] < A[i+1] ),那么就证明第i个元素已经是坡底元素的下一个元素了,不属于这个山头,所以up和down要归零。
    注意:在计算出所有的up以及down之后,我们就可以枚举山顶。需要注意的是,只有当 up 和 down均大于0 时,A[i] 才能作为山顶,并且山脉的长度为 up+down+1。
    

    代码:

    class Solution {
        public int longestMountain(int[] A) {
            int len = A.length;
            if(len < 3){
                return 0;
            }
            int up = 0, down =0;
            int res = 0;
            for(int i = 0;i < len-1; i++){
               if((A[i] == A[i+1]) || (down > 0 && A[i] < A[i+1])){
                    up = down = 0;
               }  
               if(A[i] < A[i+1]){
                   up++;
                }
                if(A[i] > A[i+1]){
                    down++;
                }
                if(up > 0 && down > 0){
                    res = Math.max(res, up + down + 1);
                }   
            }
            return res;
        }
    }
    
  • 相关阅读:
    [转]SVN服务器搭建和使用(二)
    [转]SVN服务器搭建和使用(一)
    BZOJ 2049 Sdoi2008 Cave 洞穴勘测
    BZOJ 1589 Usaco2008 Dec Trick or Treat on the Farm 采集糖果
    BZOJ 2796 POI2012 Fibonacci Representation
    BZOJ 2115 Wc2011 Xor
    BZOJ 3105 CQOI2013 新Nim游戏
    BZOJ 2460 Beijing2011 元素
    BZOJ 3687 简单题
    BZOJ 1068 SCOI2008 压缩
  • 原文地址:https://www.cnblogs.com/snail-gao/p/13874723.html
Copyright © 2011-2022 走看看