数值中的最长山脉
问题描述:将数组A中符合下列属性的任意连续子数组B称为“山脉”:
1.B.length>=3
2.存在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]”
示例2:
输入:[2,2,2]
输出: 0
不含“山脉”
数组长度不超过1000
int longestMountain(int* A, int ASize) {
if (!ASize) {
return 0;
}
int left[ASize];
left[0] = 0;
for (int i = 1; i < ASize; ++i) {
left[i] = (A[i - 1] < A[i] ? left[i - 1] + 1 : 0);
}
int right[ASize];
right[ASize - 1] = 0;
for (int i = ASize - 2; i >= 0; --i) {
right[i] = (A[i + 1] < A[i] ? right[i + 1] + 1 : 0);
}
int ans = 0;
for (int i = 0; i < ASize; ++i) {
if (left[i] > 0 && right[i] > 0) {
ans = fmax(ans, left[i] + right[i] + 1);
}
}
return ans;
}
/*代码来源于力扣官方*/