Leetcode Java Longest Turbulent Subarray
업데이트:
문제
코드
class Solution {
public int maxTurbulenceSize(int[] arr) {
int result = 0;
for (int i = 0, count = 0; i < arr.length - 1; i++, count *= -1) {
if (arr[i] > arr[i + 1]) {
count = count > 0 ? count + 1 : 1;
} else if (arr[i] < arr[i + 1]) {
count = count < 0 ? count - 1 : -1;
} else {
count = 0;
}
result = Math.max(result, Math.abs(count));
}
return result + 1;
}
}
결과
설명
-
arr 내 이어진 값이 높았다가 낮아지는 구간의 길이를 구하는 문제이다.
-
result는 길이를 저장할 변수로, 0으로 초기화한다.
- count는 0으로, 0부터 $arr.length - 1$ 미만까지 i를 증가시키고 count에 -1을 곱해주면서 아래를 반복한다.
- arr[i]의 값이 arr[$i + 1$]의 값보다 큰 경우, count가 0보다 크면 1을 증가시키고 아니면 count를 1로 초기화한다.
- 위의 경우가 아니면서 arr[i]의 값이 arr[$i + 1$]보다 작은 경우, count가 0보다 작으면 count를 감소시키고 아니면 -1로 초기화한다.
- 그 외인 두 값이 같으면 count를 0으로 초기화한다.
- result에 result와 count의 절댓값 중 큰 값을 저장한다.
- 반복이 완료되면 자기 자신을 포함한 $result + 1$을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기