Leetcode Java Longest Subarray of 1’s After Deleting One Element
업데이트:
문제
코드
class Solution {
public int longestSubarray(int[] nums) {
int i = 0;
int j = 0;
for (int k = 1; j < nums.length; j++) {
if (nums[j] == 0) {
k--;
}
if (k < 0 && nums[i++] == 0) {
k++;
}
}
return j - i - 1;
}
}
결과
설명
- 0과 1로 이루어진 nums를 이용하여 하나의 요소를 삭제했을 때 1로만 이루어진 가장 긴 길이를 구하는 문제이다.
- 단, 0으로만 구성되는 경우, 0을 반환한다.
-
i와 j는 하나의 요소를 삭제했을 경우 가장 긴 길이를 구하기 위해 시작과 종료 위치를 구하기 위한 위치 변수로, 둘 다 0으로 초기화한다.
- k는 제거할 요소의 횟수를 저장할 변수로 1로 초기화하고, j는 nums이 길이 미만까지 j를 증가시키며 아래를 반복한다.
- nums의 j번째 값이 0인 경우 k를 감소시켜 횟수를 차감시킨다.
- k가 0 미만이고 nums의 i번째 값이 0이면 i를 증가시키고다시 최대 길이를 계산해야 하므로, k를 증가시킨다.
- 단 k가 0 이상인 경우, i를 감소시키지 않는다.
- 반복이 완료되면 계산된 위치의 차이인 $j - i - 1$인 길이를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기