码迷,mamicode.com
首页 > 其他好文 > 详细

978. Longest Turbulent Subarray

时间:2020-06-01 13:46:46      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:tput   代码   表示   ges   关系   tor   xpl   问题   array   

问题:

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

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 };

 

978. Longest Turbulent Subarray

标签:tput   代码   表示   ges   关系   tor   xpl   问题   array   

原文地址:https://www.cnblogs.com/habibah-chang/p/13024479.html

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