import java.util.*;
/**
* NC406 最长山脉
* @author d3y1
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型ArrayList
* @return int整型
*/
public int longestmountain (ArrayList<Integer> nums) {
return solution1(nums);
// return solution2(nums);
}
/**
* 贪心
* @param nums
* @return
*/
private int solution1(ArrayList<Integer> nums){
int n = nums.size();
if(n < 3){
return 0;
}
int result = 0;
int left,right;
// 贪心
for(int i=1; i+1<n;){
// 当前位置 非山顶
if(nums.get(i-1)>=nums.get(i) || nums.get(i)<=nums.get(i+1)){
i++;
continue;
}
// 左边界
for(left=i; left-1>=0; left--){
if(nums.get(left-1) >= nums.get(left)){
break;
}
}
// 右边界
for(right=i; right+1<n; right++){
if(nums.get(right) <= nums.get(right+1)){
break;
}
}
result = Math.max(result, right-left+1);
i = right;
}
return result;
}
/**
* 贪心
* @param nums
* @return
*/
private int solution2(ArrayList<Integer> nums){
int n = nums.size();
if(n < 3){
return 0;
}
int result = 0;
// left[i]: i左侧连续递减的元素个数
int[] left = new int[n];
// right[i]: i右侧连续递减的元素个数
int[] right = new int[n];
for(int i=1; i<n; i++){
if(nums.get(i-1) < nums.get(i)){
left[i] = left[i-1]+1;
}
}
for(int i=n-2; i>=0; i--){
if(nums.get(i) > nums.get(i+1)){
right[i] = right[i+1]+1;
}
}
for(int i=0; i<n; i++){
// 当前位置 山顶
if(left[i]>0 && right[i]>0){
result = Math.max(result, left[i]+right[i]+1);
}
}
return result;
}
}