zoukankan      html  css  js  c++  java
  • 978. Longest Turbulent Subarray

    问题:

    给定数组,求满足锯齿形子数组<连续两两元素的增减关系为:增减依次循环出现>的最大长度。

    Example 1:
    Input: [9,4,2,10,7,8,8,1,9]
    Output: 5
    Explanation: (A[1] > A[2] < A[3] > A[4] < A[5])
    
    Example 2:
    Input: [4,8,12,16]
    Output: 2
    
    Example 3:
    Input: [100]
    Output: 1
     
    Note:
    1 <= A.length <= 40000
    0 <= A[i] <= 10^9
    

      

    解法1:

    每次计算相邻两元素之差/之差的绝对值=change

    跟上一次的change->incre比较,如果incre*(-1)==change,则满足锯齿增减趋势。

    这样的话,在临时的数组长度tmpres:+1

    否则的话,计算当前最大res=max(res, tmpres)

    同时更新tmpres=2,留用本次计算的趋势change为下一次的参照趋势:incre

    但如果此时为水平趋势,不增不减,那么无法留用上次的参照趋势,使tmpres=1,下次先得到第一次的趋势incre。

    代码参考:

     1 class Solution {
     2 public:
     3     int maxTurbulenceSize(vector<int>& A) {
     4         int incre=1;
     5         int res=1, tmpres=1;
     6         for(int i=1; i<A.size(); i++){
     7             int change=(A[i]==A[i-1])?0:(A[i]-A[i-1])/abs(A[i]-A[i-1]);
     8             if(tmpres==1 || incre*(-1)==change) tmpres++;
     9             else {
    10                 res=max(res, tmpres);
    11                 tmpres=change==0?1:2;
    12             }
    13             incre=change;
    14         }
    15         tmpres=incre==0?1:tmpres;
    16         res=max(res, tmpres);
    17         return res;
    18     }
    19 };

    解法2:

    设置两个变量代表,当前的增减数incre,decre

    若 该值>1,即表示上一次趋势为该值的情况,(incre>1:上一次为增,decre>1:上一次为减)

    若 该值==1,即表示上一次非该值的情况,(incre=1:上一次非增,为减或平;decre=1:上一次非减,为增或平)

    而在判断本次的时候,

    如果增:incre=decre+1,更新本次的incre为上一次decre值+1 > 1,同时更新本次decre=1

    如果减:decre=incre+1,更新本次的decre为上一次incre值+1 > 1,同时更新本次incre=1

    如果平:incre=1,decre=1

    每次计算res的最大=max(res, max(incre, decre))

    代码参考:

     1 class Solution {
     2 public:
     3     int maxTurbulenceSize(vector<int>& A) {
     4         int incre=1, decre=1;
     5         int res=1;
     6         for(int i=1; i<A.size(); i++){
     7             int p=A[i]-A[i-1];
     8             if(p>0){
     9                 incre=decre+1;
    10                 decre=1;
    11             }else if(p<0){
    12                 decre=incre+1;
    13                 incre=1;
    14             }else{
    15                 incre=1;
    16                 decre=1;
    17             }
    18             res=max(res, max(incre, decre));
    19         }
    20         return res;
    21     }
    22 };
  • 相关阅读:
    ElasticSearch 2 (23)
    ElasticSearch 2 (22)
    微信小程序框架模板部署:mpvue2.x+typescript+webpack3.x
    mpvue添加对scss的支持
    mpvue 封装axios请求方法
    Vue中qs插件的使用
    在微信小程序中使用less/sass
    微信小程序封装request请求
    VSCode --tsc : 无法加载文件
    Vue项目中的RSA加解密
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13024479.html
Copyright © 2011-2022 走看看