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 either 0 or 1.

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; } 

All Problems

All Solutions