Leetcode Java Longest Harmonious Subsequence
업데이트:
문제
코드
class Solution {
public int findLHS(int[] nums) {
Arrays.sort(nums);
int max = 0;
for (int idx = 0; idx < nums.length; idx++) {
if (idx == 0 || nums[idx] != nums[idx - 1]) {
int next = idx + 1;
int curr = nums[idx];
int length = 1;
while (next < nums.length && nums[next] - curr <= 1) {
length++;
next++;
}
if (nums[next - 1] - curr == 1 && length > max) {
max = length;
}
}
}
return max;
}
}
결과
설명
-
nums의 최댓값과 최솟값의 차이가 1인 가장 긴 부분 배열의 길이를 구하는 문제이다.
-
nums를 오름차순으로 정렬한다.
-
max는 부분 배열의 최대 길이를 담을 변수로, 0으로 초기화한다
- 0부터 nums의 길이 미만까지 idx를 증가시키며 아래를 반복한다.
- idx가 0이거나 nums의 idx번째 값과 $idx - 1$번째 값이 동일하지 않은 경우 아래를 수행한다.
- next에 $idx + 1$을, curr에 nums의 idx번째 값을, length를 1을 넣어 초기화한다.
- next가 nums의 길이보다 작고 nums의 next번째 값과 curr의 차이가 1 이하인 경우, length와 next를 증가시킨다.
- nums의 $next - 1$번째 값과 curr의 차이가 1이고 length가 max보다 큰 경우, max에 length를 넣어준다.
- idx가 0이거나 nums의 idx번째 값과 $idx - 1$번째 값이 동일하지 않은 경우 아래를 수행한다.
- 반복이 완료되면 max를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기