코린이의 소소한 공부노트

[LeetCode/Medium] 1493. Longest Subarray of 1's After Deleting One Element 본문

코딩테스트 풀이/JAVA

[LeetCode/Medium] 1493. Longest Subarray of 1's After Deleting One Element

무지맘 2023. 7. 6. 00:48

1. Input

1) int[] nums

 

2. Output

1) nums의 부분 배열에서 요소 1개를 삭제했을 때 1로만 이루어진 가장 긴 부분 배열의 길이를 반환

2) 그런 배열이 없다면 0을 반환

 

3. Constraint

1) 1 <= nums.length <= 10^5

2) nums01로 이루어져 있다.

 

4. Example

Input: nums = [1,1,0,1] -> Output: 3

Input: nums = [0,1,1,1,0,1,1,0,1] -> Output: 5

Input: nums = [1,1,1] -> Output: 2

설명:

- [0, 3] 구간의 부분 배열에서 2번째를 삭제하면 [1,1,1]이 된다.

- [1, 6] 구간의 부분 배열에서 4번째를 삭제하면 [1,1,1,1,1]이 된다.

- [0, 2] 구간의 부분 배열에서 아무거나 1개 삭제하면 [1,1]이 된다.

 

5. Code

class Solution {
    public int longestSubarray(int[] nums) {
        int max = 0;
        for(int i=0 ; i<nums.length ; i++){
            if(nums[i]==1){
                int zero = 0, j = i+1, zi = j;
                while(j<nums.length){
                    if(nums[j]==0) {
                        if(zero==0){
                            zero++; zi = j;
                        }
                        else if(zero==1)
                            break;
                    }
                    j++;
                }
                int len = j-i-zero;
                if(zero==2 && nums[j]==0) len++;
                if(len>max) max = len;
                if(i==0 && j==nums.length && zero==0) {
                    max--; break;
                }
                i = zi;
            }
        }
        return max;
    }
}

- 99.9%, 41%