Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,23 @@ class Solution {
else if (A[i]<A[i+1])
q[i] = 1;
}

if (A.size()==1) return 1;
if (A.size()==2) return q[0]==0? 1: 2;

int count = 1;
int start = 0;
for (int i=0; i+1<A.size()-1; i++)

int count = 1;
int i = 0;
while (i<q.size())
{
if (q[i]!=0)
count = max(count, 2);

start = i;
while (i+1<A.size()-1 && q[i]*q[i+1]==-1)
if (q[i]==0)
{
i++;
count = max(count, i-start+2);
continue;
}

int start = i;
while (i+1<q.size() && q[i]*q[i+1]==-1)
i++;

count = max(count, i-start+1+1);
i++;
}

return count;
Expand Down
5 changes: 5 additions & 0 deletions Others/978.Longest-Turbulent-Subarray/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
### 978.Longest-Turbulent-Subarray

将原始数组的相邻两个元素做差,如果为正就标记1,如果为负就标记-1,如果相等就标记0. 那么我们就能得到一个长度为n-1的序列q。显然,我们需要找q中最长的一段subarray,并且元素是1和-1间隔的。一个等价的判断就是q中的相邻元素的乘积是-1.

假设我们从i开始作为起点,那么subarray能变长的条件就是```q[i]*q[i+1]==-1```,这样我们就递增i,直至可以找到最后一个满足条件的位置i',那么q[i:i']就是一段最长的+/-1相间的序列。注意,q是差分元素,所以实际在nums里,subarray长度就是```i'-i+2```.