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 thatB[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:
0 <= A.length <= 10000
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