如果以下属性成立,则考虑(A的)任何(连续)子数组B称为山峰-
B的大小> = 3
存在一些0 <i <B.length-1,使得B [0] <B [1] <... B [i-1] <B [i]> B [i + 1]> ...> B [B.length-1]
假设我们有一个整数数组A;我们必须找到最长的山的长度。如果没有山峰,我们必须返回0。因此,如果输入类似于[2,1,4,7,3,2,5],则结果将为5。因此最大的山峰将为[1,4,7,3,2],其长度为5,
为了解决这个问题,我们将遵循以下步骤-
ret:= 0,n:=数组a的大小
i:= 0至n – 1,将i增加j + 1
down:= true并将j增加1
up:= true并将j增加1
j:=我
下:=假,上:=假
而j + 1 <n和a [j + 1]> a [j]
而up为true且j +1 <n和a [j +1]> a [j]
如果上下都正确,则设置ret:= j – i + 1的最大值,然后将j减1
返回ret。
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int longestMountain(vector<int>& a) { int ret = 0; int n = a.size(); int j; for(int i = 0; i < n; i = j + 1){ j = i; bool down = false; bool up = false; while(j + 1 < n && a[j + 1] > a[j]) { up = true; j++; } while(up && j + 1 < n && a[j + 1] < a[j]){ down = true; j++; } if(up && down){ ret = max(j - i + 1, ret); j--; } } return ret; } }; main(){ vector<int> v = {2,1,4,7,3,2,5}; Solution ob; cout << (ob.longestMountain(v)); }
[2,1,4,7,3,2,5]
输出结果
5