疯狂过山车 解题报告
题意是让我们找一个先增后减的连续子数组,那么我们就根据这个条件设置r=1,表示当前用于控制循环的指针,然后检查当前指针指向的数是不是比上一个数大,如果不比上一个数大,那么r++,同时跳过这一次循环;否则定义指针l=r,表示l是起点([l-1, r-1]是金字塔数组),然后循环r++,一步步的寻找最高点,找到最高点之后在循环r++找到下降的最低点,在下降过程中计算结果。
代码如下:
class Solution { public: /** * * @param n int整型 * @param num int整型vector * @return int整型 */ int getMaxLength(int n, vector<int>& num) { // write code here int r = 1, ans = 0; while(r < n) { if(num[r] <= num[r-1]) { r++; continue; } int l = r; while(r<n && num[r]>num[r-1]) r++; while(r<n && num[r]<num[r-1]) { r++; ans = max(ans, r-l+1); } } return ans; } };