LeetCode845. 数组中的最长山脉

845. Longest Mountain in Array

[Medium] Let’s call any (contiguous) subarray B (of A) a mountain if the following properties hold:

  • B.length >= 3
  • There exists some 0 < i < B.length - 1 such that B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]

(Note that B could be any subarray of A, including the entire array A.)

Given an array A of integers, return the length of the longest mountain.

Return 0 if there is no mountain.

Example 1:

Input: [2,1,4,7,3,2,5]
Output: 5
Explanation: The largest mountain is [1,4,7,3,2] which has length 5.

Example 2:

Input: [2,2,2]
Output: 0
Explanation: There is no mountain.

Note:

  1. 0 <= A.length <= 10000
  2. 0 <= A[i] <= 10000

Follow up:

  • Can you solve it using only one pass?
  • Can you solve it in O(1) space?

题目:给出一个整数数组 A,返回最长 “山脉” 的长度。

思路:参考lee215。山的形状从左至右遍历是先升后降,从右至左遍历的时候降的部分变为了升,而升的部分变为了降。

工程代码下载

class Solution {
public:
    int longestMountain(vector<int>& A) {
        int n = A.size();
        vector<int> up(n, 0), down(n, 0);

        for(int i = n-2; i >= 0; --i){
            if(A[i] > A[i+1])
                down[i] = down[i+1] + 1;
        }

        int res = 0;
        for(int i = 0; i < n; ++i){
            if(i > 0 && A[i] > A[i-1])
                up[i] = up[i-1] + 1;
            if(up[i] && down[i])
                res = max(res, up[i] + down[i] + 1);
        }
        return res;
    }
};

相似题目

  • 53 Maximum Subarray
  • 121 Best Time to Buy and Sell Stock
  • 152 Maximum Product Subarray
  • 238 Product of Array Except Self
  • 739 Daily Temperatures
  • 769 Max Chunks to Make Sorted
  • 768 Max Chunks to Make Sorted II
  • 821 Shortest Distance to a Character
  • 845 Longest Mountain in Array
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章