https://leetcode.com/problems/longest-mountain-in-array/
정수 배열이 주어질 때 mountain 배열 조건 만족하는 가장 긴 하위 배열의 길이 반환
mountain이 되기 위한 조건
1. arr 길이가 3 이상
2. 다음을 만족하는 i 존재
arr[0] < arr[1] < .. < arr[i-1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
현재 값을 중간으로 둔 상태에서 투포인터로 왼쪽과 오른쪽 산 만드는 규칙 만족하면 index 옮기는 식으로 해서 최대 길이 갱신
public class Solution {
public int LongestMountain(int[] arr) {
int maxLength = 0;
for(int i = 1; i < arr.Length - 1; i++)
{
if(arr[i] > arr[i-1] && arr[i] > arr[i+1])
{
int startMountain = i;
int endMountain = i;
// 왼쪽 오른쪽 규칙 만족할때까지 움직이기
while(startMountain > 0 && arr[startMountain] > arr[startMountain-1]) startMountain--;
while(endMountain < arr.Length-1 && arr[endMountain] > arr[endMountain+1]) endMountain++;
if (endMountain - startMountain + 1 >= 3)
{
maxLength = Math.Max(maxLength, (endMountain - startMountain + 1)); // mountain 최대 길이 갱신
}
}
}
return maxLength;
}
}