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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章