Welcome to Subscribe On Youtube
1493. Longest Subarray of 1’s After Deleting One Element
Description
Given a binary array nums
, you should delete one element from it.
Return the size of the longest non-empty subarray containing only 1
's in the resulting array. Return 0
if there is no such subarray.
Example 1:
Input: nums = [1,1,0,1] Output: 3 Explanation: After deleting the number in position 2, [1,1,1] contains 3 numbers with value of 1's.
Example 2:
Input: nums = [0,1,1,1,0,1,1,0,1] Output: 5 Explanation: After deleting the number in position 4, [0,1,1,1,1,1,0,1] longest subarray with value of 1's is [1,1,1,1,1].
Example 3:
Input: nums = [1,1,1] Output: 2 Explanation: You must delete one element.
Constraints:
1 <= nums.length <= 105
nums[i]
is either0
or1
.
Solutions
-
class Solution { public int longestSubarray(int[] nums) { int n = nums.length; int[] left = new int[n]; int[] right = new int[n]; for (int i = 1; i < n; ++i) { if (nums[i - 1] == 1) { left[i] = left[i - 1] + 1; } } for (int i = n - 2; i >= 0; --i) { if (nums[i + 1] == 1) { right[i] = right[i + 1] + 1; } } int ans = 0; for (int i = 0; i < n; ++i) { ans = Math.max(ans, left[i] + right[i]); } return ans; } }
-
class Solution { public: int longestSubarray(vector<int>& nums) { int n = nums.size(); vector<int> left(n); vector<int> right(n); for (int i = 1; i < n; ++i) { if (nums[i - 1] == 1) { left[i] = left[i - 1] + 1; } } for (int i = n - 2; ~i; --i) { if (nums[i + 1] == 1) { right[i] = right[i + 1] + 1; } } int ans = 0; for (int i = 0; i < n; ++i) { ans = max(ans, left[i] + right[i]); } return ans; } };
-
class Solution: def longestSubarray(self, nums: List[int]) -> int: n = len(nums) left = [0] * n right = [0] * n for i in range(1, n): if nums[i - 1] == 1: left[i] = left[i - 1] + 1 for i in range(n - 2, -1, -1): if nums[i + 1] == 1: right[i] = right[i + 1] + 1 return max(a + b for a, b in zip(left, right))
-
func longestSubarray(nums []int) int { n := len(nums) left := make([]int, n) right := make([]int, n) for i := 1; i < n; i++ { if nums[i-1] == 1 { left[i] = left[i-1] + 1 } } for i := n - 2; i >= 0; i-- { if nums[i+1] == 1 { right[i] = right[i+1] + 1 } } ans := 0 for i := 0; i < n; i++ { ans = max(ans, left[i]+right[i]) } return ans }
-
function longestSubarray(nums: number[]): number { const n = nums.length; const left: number[] = Array(n + 1).fill(0); const right: number[] = Array(n + 1).fill(0); for (let i = 1; i <= n; ++i) { if (nums[i - 1]) { left[i] = left[i - 1] + 1; } } for (let i = n - 1; ~i; --i) { if (nums[i]) { right[i] = right[i + 1] + 1; } } let ans = 0; for (let i = 0; i < n; ++i) { ans = Math.max(ans, left[i] + right[i + 1]); } return ans; }