疯狂过山车 解题报告

题意是让我们找一个先增后减的连续子数组,那么我们就根据这个条件设置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;
    }
};
全部评论

相关推荐

05-19 15:21
已编辑
门头沟学院 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务