Problem From.
https://leetcode.com/problems/longest-subarray-of-1s-after-deleting-one-element/
오늘 문제는 주어진 nums array 에서 하나의 원소만을 뺄 수 있다고 하였을때, 1로만 이루어진 가장 긴 subarray 의 길이를 구하는 문제였다.
이 문제는 sliding window 를 이용하여 풀 수 있었는데,
먼저 지워진 원소의 갯수를 의미하는 delete 를 놔두고, 그 delete 가 1 보다 커질때까지 end 를 늘린다, 그런 뒤에 end 에서 start 를 빼서 길이를 구하고, 위의 과정을 start 를 하나씩 늘려가면서 반복해나가면 된다.
class Solution {
fun longestSubarray(nums: IntArray): Int {
var start = 0
var result = 0
var delete = 0
for (end in nums.indices) {
if (nums[end] == 0) delete += 1
while(delete > 1) {
if (nums[start] == 0) delete -= 1
start += 1
}
result = Math.max(result, end - start)
}
return result
}
}