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 <= 105nums[i]is either0or1.
Solutions
- Java
- C++
- Python
- Go
- TypeScript
- Rust
- Java 2
- Java 3
- C++ 2
- C++ 3
- Python 2
- Python 3
- Go 2
- Go 3
- TypeScript 2
- TypeScript 3
- Rust 2
- Rust 3
-
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; } -
impl Solution { pub fn longest_subarray(nums: Vec<i32>) -> i32 { let n = nums.len(); let mut left = vec![0; n + 1]; let mut right = vec![0; n + 1]; for i in 1..=n { if nums[i - 1] == 1 { left[i] = left[i - 1] + 1; } } for i in (0..n).rev() { if nums[i] == 1 { right[i] = right[i + 1] + 1; } } let mut ans = 0; for i in 0..n { ans = ans.max(left[i] + right[i + 1]); } ans as i32 } } -
class Solution { public int longestSubarray(int[] nums) { int ans = 0, n = nums.length; for (int i = 0, j = 0, cnt = 0; i < n; ++i) { cnt += nums[i] ^ 1; while (cnt > 1) { cnt -= nums[j++] ^ 1; } ans = Math.max(ans, i - j); } return ans; } } -
class Solution { public int longestSubarray(int[] nums) { int cnt = 0, l = 0; for (int x : nums) { cnt += x ^ 1; if (cnt > 1) { cnt -= nums[l++] ^ 1; } } return nums.length - l - 1; } } -
class Solution { public: int longestSubarray(vector<int>& nums) { int ans = 0, n = nums.size(); for (int i = 0, j = 0, cnt = 0; i < n; ++i) { cnt += nums[i] ^ 1; while (cnt > 1) { cnt -= nums[j++] ^ 1; } ans = max(ans, i - j); } return ans; } }; -
class Solution { public: int longestSubarray(vector<int>& nums) { int cnt = 0, l = 0; for (int x : nums) { cnt += x ^ 1; if (cnt > 1) { cnt -= nums[l++] ^ 1; } } return nums.size() - l - 1; } }; -
class Solution: def longestSubarray(self, nums: List[int]) -> int: ans = 0 cnt = j = 0 for i, x in enumerate(nums): cnt += x ^ 1 while cnt > 1: cnt -= nums[j] ^ 1 j += 1 ans = max(ans, i - j) return ans -
class Solution: def longestSubarray(self, nums: List[int]) -> int: cnt = l = 0 for x in nums: cnt += x ^ 1 if cnt > 1: cnt -= nums[l] ^ 1 l += 1 return len(nums) - l - 1 -
func longestSubarray(nums []int) (ans int) { cnt, j := 0, 0 for i, x := range nums { cnt += x ^ 1 for ; cnt > 1; j++ { cnt -= nums[j] ^ 1 } ans = max(ans, i-j) } return } -
func longestSubarray(nums []int) int { cnt, l := 0, 0 for _, x := range nums { cnt += x ^ 1 if cnt > 1 { cnt -= nums[l] ^ 1 l++ } } return len(nums) - l - 1 } -
function longestSubarray(nums: number[]): number { let [ans, cnt, j] = [0, 0, 0]; for (let i = 0; i < nums.length; ++i) { cnt += nums[i] ^ 1; while (cnt > 1) { cnt -= nums[j++] ^ 1; } ans = Math.max(ans, i - j); } return ans; } -
function longestSubarray(nums: number[]): number { let [cnt, l] = [0, 0]; for (const x of nums) { cnt += x ^ 1; if (cnt > 1) { cnt -= nums[l++] ^ 1; } } return nums.length - l - 1; } -
impl Solution { pub fn longest_subarray(nums: Vec<i32>) -> i32 { let n = nums.len(); let mut ans = 0; let mut j = 0; let mut cnt = 0; for i in 0..n { cnt += nums[i] ^ 1; while cnt > 1 { cnt -= nums[j] ^ 1; j += 1; } ans = ans.max(i - j); } ans as i32 } } -
impl Solution { pub fn longest_subarray(nums: Vec<i32>) -> i32 { let mut cnt = 0; let mut l = 0; for &x in &nums { cnt += x ^ 1; if cnt > 1 { cnt -= nums[l] ^ 1; l += 1; } } (nums.len() - l - 1) as i32 } }